Я просматривал тему TypeErasure по адресу http://download.oracle.com/javase/tutorial/java/generics/erasure.html, в котором говорится, что компилятор удаляет всю информацию, связанную с параметрами и аргументами типа внутри класса или метода.
Теперь рассмотрим код ниже
public class Box<T> {
private T t; // lineA, T stands for "Type"
public void add(T t) { // lineB
this.t = t; // lineC
}
public T get() { // lineD
return t; // lineE
}
}
Теперь внутри метода main
у меня есть фрагмент кода ниже
Box<String> box1 = new Box<String>(); // line1
box1.add("Scott"); // line2
String s1tr=box1.get(); // line3
Box<Integer> box2 = new Box<Integer>(); // line4
box2.add(1); // line5
Integer k=box2.get(); // line6
Теперь в приведенном выше коде (в классе Box
и методе main
) какие изменения сделает компилятор и в какой строке?
Поскольку ссылка говорит, что компилятор удаляет всю информацию, связанную с параметрами типа и аргументами типа в классе или методе, когда компилятор будет компилировать класс Box
, удалит ли он все вхождения T
, <String>
, <Integer>
из класса Box
и метода main
соответственно? Если да, то каким будет скомпилированный код после удаления T
?
Box<Integer>
иBox<String>
) не совпадают. - person joschi   schedule 10.09.2011