これは基本的にジェネリック型の消去によるものです。実行時に、オブジェクトはそれがEnumeration<E>
for 型であることしか認識しE
ないため、実際にEnumeration<DefaultMutableTreeNode>
.
詳細、特に型消去エントリについては、 Java Generics FAQを参照してください。
編集:最初の警告なしで成功し、2番目の警告なしで成功する理由がわかりません。どちらも警告を出すと思います。私の経験では、それなしでは本当にうまくいくとは限りませ@SuppressWarnings("unchecked")
ん-可能な限り最小限に抑える価値はありますが、Javaジェネリックでは残念な事実です:(
編集:実際には、これらの両方から警告が表示されます:
import java.util.*;
import javax.swing.tree.*;
public class Test {
public static void main(String[] args) {
DefaultMutableTreeNode node = null;
Enumeration<DefaultMutableTreeNode> en1 =
(Enumeration<DefaultMutableTreeNode>)node.postorderEnumeration();
Enumeration<DefaultMutableTreeNode> en2 =
(Enumeration<DefaultMutableTreeNode>)node.pathFromAncestorEnumeration(null);
}
}
出力:
c:\Users\Jon\Test>javac -Xlint Test.java
Test.java:8: warning: [unchecked] unchecked cast
Enumeration<DefaultMutableTreeNode> en1 = (Enumeration<DefaultMutableTre
eNode>)node.postorderEnumeration();
^
required: Enumeration<DefaultMutableTreeNode>
found: Enumeration
Test.java:9: warning: [unchecked] unchecked cast
Enumeration<DefaultMutableTreeNode> en2 = (Enumeration<DefaultMutableTre
eNode>)node.pathFromAncestorEnumeration(null);
^
required: Enumeration<DefaultMutableTreeNode>
found: Enumeration
2 warnings