[英]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.