2

一直在网上寻找答案,但还没有找到任何答案。我创建了以下方法

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

非常感谢所有帮助!

4

3 回答 3

1

当您调用 getRoot() 时,DefaultTreeModel返回一个对象。编译器没有关于它在运行时将是什么类型的信息,因此它假定它是一个对象并且不能将其转换为 DefaultMutableTreeNode。

即使它在运行时是正确的类,它也无法在编译时知道这一点。你将不得不检查它instanceof

Object o = tree.getRoot();
if(o instanceof DefaultMutableTreeNode) {
    DefaultMutableTreeNode root = (DefaultMutableTreeNode)o;
    ...
}
于 2012-11-28T21:26:11.557 回答
1

那是因为getRoot返回一个对象:http://docs.oracle.com/javase/6/docs/api/javax/swing/tree/DefaultTreeModel.html#getRoot()

尝试铸造:

DefaultMutableTreeNode current = (DefaultMutableTreeNode)tree.getRoot();
于 2012-11-28T21:26:33.200 回答
1

如果您查看文档,您会看到getRoot返回一个Object. 您可以尝试投射:

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

getClass可能正在返回javax.swing.tree.DefaultMutableTreeNode,因为此对象是 a 的实例DefaultMutableTreeNode但它的类型仍然是Object,这就是您收到错误的原因)。


相关文件:

于 2012-11-28T21:24:32.337 回答