这是我遇到的一个案例的狭窄示例.
看一下下面的代码:
class Holder {
private T t;
public Holder(T t) {
this.t = t;
}
public T getValue() {
return t;
}
}
public class FooMain {
private static Object newHolder() {
return new Holder(3);
}
public static void main(String args[]) {
Holder hs = (Holder) newHolder(); // line-18
String s = hs.getValue(); // line-19
}
}
令我感到震惊的是,不可避免的ClassCastException在第19行而不是在第18行抛出!
因此,在您的代码中有一个类型为Holder< String>的对象.不足以保证getValue将返回String.您还必须检查该对象的构造方式!
我知道类型删除在这里起着作用,但是我不确定以上内容的含义有多广.在我的特殊情况下,newHolder对应的方法在外部库中定义并返回java.lang.Object,因此我必须进行这些强制转换.