【发布时间】:2017-11-29 17:03:36
【问题描述】:
假设我有一个方法
@SuppressWarnings("unchecked")
public <T extends Number> T getNumber() {
try {
return (T)number;
} catch (ClassCastException e) {
return null;
}
}
假设number是Integer的一个实例,调用方法如
Float f = getNumber();
结果为@987654325@。
我知道(不知何故)这是因为 类型擦除,但有人可以提供更深刻的解释,为什么异常会升级到分配级别并且在方法内部无法捕获?
注意:我确实有版本 public <T extends Number> T getNumber(Class<T> classT),它检查来自 classT 的类型,但希望摆脱通过 classT 并不再怀疑上述问题。
【问题讨论】:
标签: java generics casting classcastexception type-erasure