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が返されることがわかりますObject。キャストを試すことができます:

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

getClassjavax.swing.tree.DefaultMutableTreeNodeこのオブジェクトはのインスタンスであるため、おそらく返されますDefaultMutableTreeNode(ただし、その型はまだObjectです。そのため、エラーが発生します)。


関連ドキュメント:

于 2012-11-28T21:24:32.337 に答える
1

DefaultTreeModelは、getRoot()を呼び出すとオブジェクトを返します。コンパイラーは、実行時にどのタイプになるかについての情報を持っていないため、それがオブジェクトであると想定し、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 に答える