java - 泛型 - 类型推断和类型删除

标签 java generics types type-inference type-erasure

使用 Java SE-1.7 编译的代码给出以下输出(如下)。我的理解,推断的值类型应该是Object,怎么会识别出String和Integer类型呢?

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

最佳答案

value.getClass() 返回 value 引用的对象的运行时类型。

存储在Object类型字段中的Integer仍然是一个Integer

关于java - 泛型 - 类型推断和类型删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29775981/

相关文章:

java - GWT SimplePager如何刷新

generics - 当类型参数在声明站点协变时,强制类型参数在使用站点保持不变

java - 将类型 T 的对象插入通用列表

java - 有什么方法可以在 Java 中创建字符串文字类型?

java - 使用Hadoop MapReduce在不同的节点上处理不同的文件

java - Java 在二叉树中插入元素

java - 是否有可以在 JRE 6 上使用 Java 5 编译器但不能使用 Java 6 编译器编译的 Java 程序片段?

generics - Java 代码中 "? extends"上的 Scala 类型推断失败

scala - 多函数中的类型删除,scala

types - idris 印章类型