为什么我不能调用setSomething()?

时间:2010-03-26 15:18:33

标签: java netbeans

我不知道如何访问我的类ProjectNode的方法,它从ExplorerManager mgr返回,如下所示:

mgr.getRootContext().setSomething()

getRootContext()返回Node对象,但是我将类ProjectNode(将AbstractNode,abstractNode extends extends)扩展为rootContext。

编译器不想吃那行代码。但它必须!

3 个答案:

答案 0 :(得分:3)

如果getRootContext()返回Node,那么您只能调用Node中定义的方法,而不能调用其子类中定义的方法。如果需要,可以将返回值强制转换为另一个类:

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

答案 1 :(得分:1)

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

不要忘记检查类型!

答案 2 :(得分:0)

如果setSomething()不是Node类的公共方法,那么无论您如何尝试,都无法“为编译器提供”代码。 正如所有智者上面所说的那样,你必须将结果转换为定义setSomething()方法的子类。