[英]gwt - How does the inheritance work in gwt?
如果我刚开始使用gwt时我的问题太幼稚,请原谅我。
我创建了一个gwt module
(比如说Editor_A
),该gwt module
具有许多DataGrid,按钮等。它在网页中运行良好。
然后,我将创建第二个gwt模块Editor_B
。
它们永远不会在同一页面上,但是, Editor_B
与Editor_A
非常相似,因为它只有一个额外的表和一个按钮。
当然,现在,我不想将代码从Editor_A
复制/粘贴到Editor_B
。 相反, 我希望重用Editor_A中的代码 。
我怎样才能做到这一点?
如何从Editor_A继承并重用其大部分代码,并进行一些修改以产生Editor_B?
这可以解决您的问题:您可以创建一个附加的Core模块,该模块负责您的基本自定义小部件,客户端Utils等。然后您应该在这两个模块中继承Core模块。 因此,在您的情况下,您可以创建由Editor_A
使用的Composite小部件,然后在后面的模块中,您可以通过继承Editor_A
来创建Editor_B
。 当然,您可以在Editor_B
类中对其进行一些修改。
如果在同一模块中使用它们,则可以创建一个BaseEditor,在您的情况下为Editor_A。 接着:
public class Editor_B extends Editor_A{
public Editor_B(){
draw();
}
private void draw(){
// here, add your extra table and button, to panel which're protected(public)
}
}
除了Java继承,请确保以适当的方式配置GWT模块,否则GWT Java到Javascript编译器将找不到相关的类。 通过将模块XML配置修改为以下方式来执行此操作:
<module>
<inherits name='com.google.gwt.user.User'/>
<source path="widgets"/>
</module>
最好的方法是创建可在同一模块或不同模块中轻松重用的自定义窗口小部件。 然后,您可以:
(a)通过添加更多子控件和/或新功能来扩展自定义控件(MyBigPanel扩展了MySmallPanel),或者
(b)只需将更多子代添加到同一个复合窗口小部件(前提是可以容纳它们,即您将LayoutPanel,FlowPanel,HtmlPanel等用作自定义窗口小部件的容器)。 然后,您只需调用mySmallPanel.add(anotherButton)。
附带说明:您提到这些小部件将不在同一页面上使用。 这并不意味着它们必须位于不同的模块中。 它们可以在同一模块的不同视图中使用。 例如,将模块视为具有不同用户的独立应用程序。 在这种情况下,您可以将所有小部件抽象到另一个模块中(并在其他模块中继承),也可以将它们放在单独的jar中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.