那家工厂应该工作:
class MyFactory { @Prefix("showUser") public PlaceTokenizer<ShowUserPlace> showUserPlace() { return new UserPlaceTokenizer<ShowUserPlace>() { protected ShowUserPlace createPlace(String id) { return new ShowUserPlace(id); } }; } @Prefix("showUser") public PlaceTokenizer<EditUserPlace> showUserPlace() { return new UserPlaceTokenizer<EditUserPlace>() { protected EditUserPlace createPlace(String id) { return new EditUserPlace(id); } }; }}abstract class UserPlaceTokenizer<P extends UserPlace> implements PlaceTokenizer<P> { public P getPlace(String token) { // shared logic between both places: parses ID (or whatever) from token return createPlace(id); } public String getToken(P place) { // shared logic between both places: build token out of place return token; } protected abstract P createPlace(String id);}当然,您也可以
Provider<P>在令牌生成器中注入某种形式,而不是对其进行子类化以覆盖其
createPlace方法。
您可以将其与一起使用
@WithTokenizers,如果生成器找到了两个完全相同的位置或前缀的标记器,则生成器将阻塞。
您应该
setFactory在
GWT.create()映射器之后立即调用(实际上,重要的是在调用映射器
getPlace或
getToken方法之前先设置工厂)。



