2011-01-28 86 views
0

如何從小部件實例獲取類intance。在gwt中,我的小部件是pojo類的私人領域。我能夠使用instanceOfPojo.returnWidget()獲取小部件;方法。可我知道如何讓實例類widget的,這樣我可以使用獲取小部件實例

if(widget instanceof CustomWidgetClass) ? 

- 讓我重新整理

讓的說,AbcClass延伸複合,我們可以檢查是否匹配

if(widget instanceof AbcClass) . 

但讓我們說我們不知道類AbcClass存在,但我們可以得到abcClass的實例。用這個實例的abcClass,如何使用java創建類似的類,我們稱之爲DefClass,以便我們可以將abcClass轉換爲它?

+0

GWT支持instanceof - 你問題中的條件[if(widget instanceof CustomWidgetClass)]應該按預期工作。你能更具體地瞭解你遇到的問題嗎? – 2011-01-28 03:00:52

+0

@Jason,是的,我知道gwt支持instanceof,問題是我的小部件不是用具體類創建的。它在instanceofPojo裏面。所以如何使用它與if(widget instanceof instanceOfPojo.returnWidget())相比? – cometta 2011-01-28 03:04:06

回答

0

...所以如何使用它與if(小部件instanceof instanceOfPojo.returnWidget())相比?

我真的很難理解你在問什麼。您是否試圖獲得 widget instanceof instanceOfPojo.returnWidget()的等效工作,因爲 instanceof僅適用於類文字,所以不起作用?

要查看類的instanceOfPojo.returnWidget()widget的類的父類,你可以使用isAssignableFrom

instanceOfPojo.returnWidget().getClass().isAssignableFrom(widget.getClass()); 

,看看他們是完全一樣的類:

instanceOfPojo.returnWidget().getClass() == widget.getClass() 

如果這不是你的意思,請嘗試澄清你的問題。

編輯: OP自澄清的問題。

...我們可以得到abcClass的實例。與abcClass的這種情況下,如何使用Java創建同級

爲了得到一個類的實例,然後創建一個類似的類從它需要動態創建在運行時的類。它可能在Java中動態創建一個類,但我非常懷疑你可以在GWT客戶端代碼中完成它。這是因爲GWT僅支持Java的一個子集並被轉換爲Javascript。

......我們稱之爲DefClass,以便我們可以將abcClass投射到它上面?

由於類的abcClass是(「未知」)類AbcClassAbcClass直接從複合派生,你將無法投abcClass這個動態類DefClassDefClassabcClass繼承層次結構的一部分(AbcClass - >Composite - >Widget - >UIObject - >Object),你不能改變的繼承層次的事實後,在運行過程中包括DefClass

1

如果你有你的小部件在你的POJO中,那麼我會建議你重新訪問你的設計。也許一個工廠對你所要做的事情會是一個更好的設計。