这基本上是由于泛型擦除。在执行时,对象将只知道它是Enumeration<E>
某些类型E
- 因此它不能实际上检查它是否是Enumeration<DefaultMutableTreeNode>
。
查看Java Generics FAQ了解更多信息,尤其是type erasure条目。
编辑:我不知道为什么第一个会成功没有警告,第二个不是。我希望都给予警告。你真的不能总是跑不掉没有在我的经验@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
什么返回类型的那些方法 – SLaks 2012-07-31 21:13:07
什么是this.getRootNode() – GreenMatt 2012-07-31 21:14:38
[Both](http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/tree/DefaultMutableTreeNode.html#preorderEnumeration())返回[Enumeration](http:// docs .oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html) – ubiquibacon 2012-07-31 21:15:08