Java 泛型.类型推断和类型擦除

Java 泛型.类型推断和类型擦除,java,generics,types,type-inference,type-erasure,Java,Generics,Types,Type Inference,Type Erasure,使用JavaSE-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.va

使用JavaSE-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());
    }
}
value.getClass()
返回
value
引用的对象的运行时类型

存储在
对象
类型字段中的
整数
仍然是
整数
值。getClass()
返回
引用的对象的运行时类型

存储在
对象
类型字段中的
整数
仍然是
整数
值。getClass()
返回
引用的对象的运行时类型

存储在
对象
类型字段中的
整数
仍然是
整数
值。getClass()
返回
引用的对象的运行时类型


存储在
对象
类型字段中的
整数
仍然是
整数
变量
公共T值
的类型已被删除,因此它本质上是
公共对象值
。但是,即使您的变量没有指定确切的类型,实例本身仍然知道它是什么类

例如

输出:

java.lang.String java.lang.String
变量
public T value
的类型已被删除,因此它本质上是
public Object value
。但是,即使您的变量没有指定确切的类型,实例本身仍然知道它是什么类

例如

输出:

java.lang.String java.lang.String
变量
public T value
的类型已被删除,因此它本质上是
public Object value
。但是,即使您的变量没有指定确切的类型,实例本身仍然知道它是什么类

例如

输出:

java.lang.String java.lang.String
变量
public T value
的类型已被删除,因此它本质上是
public Object value
。但是,即使您的变量没有指定确切的类型,实例本身仍然知道它是什么类

例如

输出:

java.lang.String java.lang.String
需要注意的是,
12
可以是一个
整数
文字。@Turing85:文字根本不相关。
12
可以是一个
整数
文字。@Turing85:文字根本不相关。
12
可以是一个
整数
文字。@Turing85:文字根本不相关。应该注意,
12
可以是
整数
文字。@Turing85:文字根本不相关。