2010-03-26 125 views
2

我不知道如何進入電影我的我的課ProjectNode的方法,即從ExplorerManager經理這樣的返回:爲什麼我不能調用setSomething()?

mgr.getRootContext().setSomething() 

getRootContext()返回節點的對象,但我把類ProjectNode(擴展是AbstractNode,是AbstractNode擴展節點)轉換爲rootContext。

編譯器不想吃那行代碼。但它一定!

回答

1
((ProjectNode)mgr.getRootContext()).setSomething(); 

不要忘記檢查的類型!

+0

它的工作原理,謝謝 – badgirl 2010-03-26 15:24:15

3

如果getRootContext()返回Node,那麼您只能調用Node中定義的方法,而不能在其子類中調用方法。您可以將返回值轉換爲另一個類,如果你需要的是:

Node rootContext = mgr.getRootContext(); 
if(rootContext instanceof ProjectNode){ 
    ProjectNode rootProjectNode = (ProjectNode)rootContext; 
    rootProjectNode.setSomething(); 
} else { 
    //handle this case 
} 
0

如果setSomething()不是Node類上的公共方法,那麼無論您如何嘗試,都無法「餵養編譯器」該代碼。 正如所有智者所說的,你必須把結果投給定義你的方法的子類。

相關問題