2012-11-28 150 views
2

在線搜索答案,但還沒有找到任何答案。 我已經創建瞭如下方法Java DefaultMutableTree不兼容類型

public void process(DefaultTreeModel tree){ 
    DefaultMutableTreeNode current = tree.getRoot(); 
} 

但是,編譯器是投​​擲不兼容的類型的錯誤。 樹是通過從我自己的類創建DefaultMutableTreeNodes,然後將它們添加到DefaultMutableTree(測試並正常工作)創建的。

林不知道爲什麼類型不兼容,因爲當我運行以下

public void process(DefaultTreeModel tree){ 
    Object o = tree.getRoot(); 
    System.out.println(o.getClass()); 
} 

它輸出:

class javax.swing.tree.DefaultMutableTreeNode 

所有幫助非常感謝!

回答

1

DefaultTreeModel當你調用getRoot返回Object()。編譯器沒有關於它在運行時的類型的信息,所以它認爲它是一個對象,並且不能將它轉換爲DefaultMutableTreeNode。

即使它在運行時是正確的類,它在編譯時也不知道。你將有instanceof

Object o = tree.getRoot(); 
if(o instanceof DefaultMutableTreeNode) { 
    DefaultMutableTreeNode root = (DefaultMutableTreeNode)o; 
    ... 
} 
+0

哦,我明白了,我認爲它在運行時會很好。絕對不符合Java的實踐。謝謝! – TheYellowKnight

1

如果您查看documentation,您會看到getRoot返回Object。您可以嘗試鑄造:

DefaultMutableTreeNode current = (DefaultMutableTreeNode)tree.getRoot(); 

getClass可能是返回javax.swing.tree.DefaultMutableTreeNode因爲這個對象是DefaultMutableTreeNode實例(但其仍類型爲Object,這就是爲什麼您會收到錯誤)。


相關文章:

+0

工作,現在的感謝! – TheYellowKnight

+0

@ user1861339很高興能幫到你:-)別忘了[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – arshajii