在提出问题之前,我将简要描述背景。 我有一个Widget类,它将ui实现“外包”到一个单独的类中(如下所示):
public class SimpleFilmWidget extends Composite implements FilmActivityControl {
public static interface Ui {
Panel getMainPanel();
VoteWidget getVotePanel();
InlineLabel getHaveNotSeenLabel();
//...
}
实际的widget类可以使用Ui类实例获取对特定子字段widget /元素的引用:
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
答案 0 :(得分:1)
我认为没有理由不可能:UiBinder查看公开的API,并调用传递给createAndBindUi
的实际实例上的方法,这只是标准的多态。
答案 1 :(得分:0)
结论:
UiFactory方法不应该被覆盖,因为uibinder会看到两种方法(被覆盖和覆盖)并且与同一类型的两个uifactories混淆:[ERROR] Duplicate factory in class SimpleFilmWidget.DefaultUi for type VoteWidget.
从评论到@Thomas Broyer: 我怀疑,它然后调用超类'UiFactory注释方法,这不是我想要它做的。我离开了这个问题,因为在这种情况下,解决方案的态度对我来说是足够的。
感谢您的关注。