2010-03-26 123 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类上的公共方法,那么无论您如何尝试,都无法“喂养编译器”该代码。 正如所有智者所说的,你必须把结果投给定义你的方法的子类。

相关问题