У меня есть следующий класс (упрощенный, но все же рабочий пример):
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)
не работает?