Этот код, составленный с помощью Java SE-1.7, дает следующий результат (см. Ниже). Я понимаю, что предполагаемый тип значения должен быть Object, как получается, что существуют типы String и Integer?Generics - тип вывода и тип erasure
public class Generics1 {
public class Pocket<T>{
public T value;
public void set(T value) { this.value = value; }
public void set(String value) { this.value = (T)value; } //warning
}
public static void main(String[] args) {
Pocket<Object> intPocket = new Generics1().new Pocket<>();
intPocket.set("foo");
System.out.println(intPocket.value);
System.out.println(intPocket.value.getClass().getName());
intPocket.set(12);
System.out.println(intPocket.value);
System.out.println(intPocket.value.getClass().getName());
}
}
Выход:
foo
java.lang.String
12
java.lang.Integer
Следует отметить, что '12' может быть' Integer' буквальным. – Turing85
@ Turing85: Литерал совсем не имеет отношения. – SLaks