Java 泛型.类型推断和类型擦除
使用JavaSE-1.7编译的代码给出以下输出(如下)。我知道,值的推断类型应该是Object,怎么会有字符串和整数类型被识别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
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:文字根本不相关。