UiBinder:可以覆盖工厂方法吗?

时间:2012-07-12 17:01:44

标签: java gwt uibinder

在提出问题之前,我将简要描述背景。 我有一个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

2 个答案:

答案 0 :(得分:1)

我认为没有理由不可能:UiBinder查看公开的API,并调用传递给createAndBindUi的实际实例上的方法,这只是标准的多态。

答案 1 :(得分:0)

结论:

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

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

感谢您的关注。