我有以下类(简化的但仍然是一个工作示例):
class Test<T> {
List<T> l = new ArrayList<>();
public Test() {
}
public void add(Object o) {
l.add((T)o);
}
}
以及测试代码:
Test<Double> t = new Test<>();
t.add(1);
t.add(1.2);
t.add(-5.6e-2);
t.add("hello");
一切都运行得很好,这不是我所期望的。add
方法不应该抛出ClassCastException
吗?如果我添加一个基本相同的get
方法:
public T get(int i) {
return l.get(i);
}
.../...
t.get(1); // OK.
t.get(3); // OK (?)
Double d = t.get(3); // throws ClassCastException
为什么只有在变量赋值时才会抛出异常?如果(T)
强制转换不起作用,我如何强制类型一致性?
https://stackoverflow.com/questions/31960987
复制相似问题