0

我有一个与自定义 GWT 小部件有关的问题。

我将制作一个执行语言选择的自定义 ListBox。我试图通过扩展 GWT 的 ListBox 类来实现这一点,它可以工作。

public class LanguageListBox extends ListBox {
   ....
}

但是,我认为从 Java 的角度来看,我们可能更喜欢组合而不是继承。我确实阅读了一些建议扩展 Composite 而不是小部件本身的文章。

public class LanguageListBox extends Widget {
    private final ListBox listBox;

    LanguageListBox() {
        listBox = new ListBox();
    }

    ......
}

这个类不工作。我相信我未能创建将调用到 LanguageListBox 的某些方法转发到包装的 ListBox 的桥接方法。但是,我检查了 ListBox 的许多方法,我需要转发哪个方法才能使这个设计工作?

总而言之,我不确定在这种情况下最好的设计是什么。

  • 我应该让我的 LanguageListBox 直接扩展 ListBox 还是扩展 Compisite 并将方法调用转发到包装的 ListBox?
  • 还有其他更好的设计吗?
4

1 回答 1

2

尽管组合通常比继承更受欢迎。在这种情况下,我肯定会使用继承,因为您基本上想在小部件中添加新功能或自定义现有功能,同时保留几乎所有ListBox必须提供的功能。我认为通常在处理 GUI 组件时,继承是通常的,并且在大多数情况下是最好的解决方案。但是,您应该确保,如果ListBox不继承它,您将无法实现与 normal 相同的效果。

正如您提到的那样,该课程将不起作用,因为ListBox和之间绝对没有桥梁LanguageListBox。这没有多大意义。

至于语言选择。我认为它可以通过正常来实现,ListBox除非你想拥有一些非常特殊的功能。

于 2013-08-11T09:32:59.493 回答