不要在Java泛型避免所有ClassCastExceptins?
-
16-09-2019 - |
题
由于泛型是在编译时期间与Java 5只检查,可避免它们在所有的ClassCastExceptions 的情况?
解决方案
首先,你应该确保你的代码编译没有unckeched警告。这是一个很好的指标。要理解为什么,我建议你看一看href="http://java.sun.com/docs/books/effective/" rel="nofollow从有效的Java泛型
所有的二,泛型不能从代码守护你如:
public void methodOne(Integer argument) {
methodTwo(argument);
}
public void methodTwo(Object argument) {
System.out.println(((Date) argument).getTime());
}
所有的三,如果你以某种方式或类加载器的另一搞乱,你可能会奇怪ClassCastExceptions
,如在的这个话题。据头脑麻木看
java.lang.ClassCastException:javax.mail.Session不能被转换为 javax.mail.Session
因此,答案是的不,你不能得到公正,合理地利用泛型摆脱ClassCastException
s的的。
其他提示
在“铸铁”保证的Java 5泛型提供的是,你永远不会看到由编译器插入蒙上一个ClassCastException的提供的那编译没有产生“选中”的警告。
在现实生活中,你经常无法避免unchecked警告,如果你的代码使用传统(非泛型)库。那么编译器生成的铸件的可以的抛出ClassCastException异常,这是你的工作,通过确保库代码返回的值是公键入您的声明,以防止这一点。
否则情况不变。仿制药之外,如果你投以不兼容的类型,你会得到一个ClassCastException相同的方式,你总是这样。
(对于这个和其它的问题泛型一个很好的参考是 Java泛型和集合的。)
没有。使用Java 5.0和泛型类型并不会让你抛出ClassCastException防。
不。仿制药不仅节省您的编译时错误,而不是运行时异常。