1

在提出问题之前,我将简要介绍一下上下文。我有一个 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

4

2 回答 2

1

I see no reason it wouldn't be possible: UiBinder looks at the exposed API, and calls the method on the actual instance passed to createAndBindUi, this is just standard polymorphism.

于 2012-07-12T17:54:28.677 回答
0

结论:

UiFactory 方法不应被覆盖,因为 uibinder 会同时看到这两种方法(被覆盖和覆盖)并与同一类型的两个 uifactories 混淆:[ERROR] Duplicate factory in class SimpleFilmWidget.DefaultUi for type VoteWidget.

从评论到@Thomas Broyer: 我怀疑,它然后调用超类的 UiFactory 注释方法,这不是我想要的。我离开了这个问题,因为在这种情况下解决方法对我来说已经足够了。

无论如何,感谢您的关注。

于 2012-10-14T12:21:06.513 回答