Java
0
Вклад в тег
g.set("String"); f.set(123);
class Test<T> {
T val; // на самом деле T заменяется на Object
Test(T o) { val = o; }
T get() { return val; }
}
class SimpleClass {
void info() { System.out.println("я метод info() из класса SimpleClass"); }
}
Test<SimpleClass> v = new Test<>(new SimpleClass());
SimpleClass v2 = v.get(); // при инициализации v2 на самом деле происходит неявное нисходящее преобразование к нужному типу
//что происходит на самом деле:
//SimpleClass v2 = (SimpleClass) v.get();
v2.info();
Стирание генерализированных типов происходит на стадии компиляции. В самом простом случае ничем не ограниченный тип стирается до Object`а, обобщенный класс NameClass до NameClass.
Другими словами информация о дженериках существует только на этапе компиляции и недоступна в runtime.