在提出问题之前,我将简要介绍一下上下文。我有一个 Widget 类,它将 ui 实现“外包”到一个单独的类(如下所示):
public class SimpleFilmWidget extends Composite implements FilmActivityControl {
public static interface Ui {
Panel getMainPanel();
VoteWidget getVotePanel();
InlineLabel getHaveNotSeenLabel();
//...
}
实际的小部件类可以使用 Ui 类实例获取对特定子字段小部件/元素的引用:
Ui ui;
public SimpleFilmWidget() {
this(new DefaultUi());
}
public SimpleFilmWidget(Ui customUi) {
assert customUi != null : "UI should not be null!!!";
ui = customUi;
initWidget(ui.getMainPanel());
}
我用 UiBinder 提供了实际的 UI 实现,它使用 UiFactory 创建另一个复杂的子小部件
class DefaultUi implements Ui {
//...
@UiFactory
protected VoteWidget createVoteWidget(){
return new VoteWidget(msg){
@Override
protected SetVoteEvent onSetVote(Star star, boolean fireEvents) {
return clientWidget.onSetVote(super.onSetVote(star, fireEvents));
}
};
}
问题是:当我提供 DefaultUi 的子类时,是否可以在子类中重写 UiFactory 方法而不混淆 UiBinder 解析器?
编辑:
UiFactory 方法不应被覆盖,因为 uibinder 会同时看到这两种方法(被覆盖和覆盖)并与同一类型的两个 uifactories 混淆:[ERROR] Duplicate factory in class SimpleFilmWidget.DefaultUi for type VoteWidget