由于泛型是在编译时期间与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

因此,答案是的不,你不能得到公正,合理地利用泛型摆脱ClassCastExceptions的的。

其他提示

在“铸铁”保证的Java 5泛型提供的是,你永远不会看到由编译器插入蒙上一个ClassCastException的提供的那编译没有产生“选中”的警告。

在现实生活中,你经常无法避免unchecked警告,如果你的代码使用传统(非泛型)库。那么编译器生成的铸件的可以的抛出ClassCastException异常,这是你的工作,通过确保库代码返回的值是公键入您的声明,以防止这一点。

否则情况不变。仿制药之外,如果你投以不兼容的类型,你会得到一个ClassCastException相同的方式,你总是这样。

(对于这个和其它的问题泛型一个很好的参考是 Java泛型和集合的。)

没有。使用Java 5.0和泛型类型并不会让你抛出ClassCastException防。

不。仿制药不仅节省您的编译时错误,而不是运行时异常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top