Этот код, скомпилированный с помощью Java SE-1.7, дает следующий результат (ниже). Я понимаю, предполагаемый тип значения должен быть Object, как получается, что распознаются строковые и целые типы?
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