使用Java SE-1.7编译的此代码提供以下输出(如下所示)。我明白,推断的值类型应该是Object,如何识别String和Integer Types?
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
答案 0 :(得分:2)
value.getClass()
返回value
引用的对象的运行时类型。
存储在Integer
类型字段中的Object
仍为Integer
。
答案 1 :(得分:1)
变量public T value
的类型已被删除,因此它基本上是public Object value
。但即使你的变量没有指定确切的类型,实例本身仍然知道它是什么类。
E.g。
Object value = "bananas";
System.out.println(value.getClass().getName());
输出:
java.lang.String