我不知道如何進入電影我的我的課ProjectNode的方法,即從ExplorerManager經理這樣的返回:爲什麼我不能調用setSomething()?
mgr.getRootContext().setSomething()
getRootContext()返回節點的對象,但我把類ProjectNode(擴展是AbstractNode,是AbstractNode擴展節點)轉換爲rootContext。
編譯器不想吃那行代碼。但它一定!
我不知道如何進入電影我的我的課ProjectNode的方法,即從ExplorerManager經理這樣的返回:爲什麼我不能調用setSomething()?
mgr.getRootContext().setSomething()
getRootContext()返回節點的對象,但我把類ProjectNode(擴展是AbstractNode,是AbstractNode擴展節點)轉換爲rootContext。
編譯器不想吃那行代碼。但它一定!
((ProjectNode)mgr.getRootContext()).setSomething();
不要忘記檢查的類型!
如果getRootContext()
返回Node
,那麼您只能調用Node
中定義的方法,而不能在其子類中調用方法。您可以將返回值轉換爲另一個類,如果你需要的是:
Node rootContext = mgr.getRootContext();
if(rootContext instanceof ProjectNode){
ProjectNode rootProjectNode = (ProjectNode)rootContext;
rootProjectNode.setSomething();
} else {
//handle this case
}
如果setSomething()
不是Node
類上的公共方法,那麼無論您如何嘗試,都無法「餵養編譯器」該代碼。 正如所有智者所說的,你必須把結果投給定義你的方法的子類。
它的工作原理,謝謝 – badgirl 2010-03-26 15:24:15