据我了解,Java 泛型会删除泛型方法(或泛型类)中有关参数类型 T 的所有信息。这就是为什么我们不能使用
新的表达方式,例如
new T()
instanceof 表达式,例如
if(obj instanceof T)
在泛型方法中。
我的问题是参数类型 T 在进行强制转换时如何在泛型方法中工作。例如,我在这里有 3 个简单的类:
public class People {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public People(String name) {
super();
this.name = name;
}
@Override
public String toString() {
return "People [name=" + name + "]";
}
}
public class GenericClass<T> {
public T getCast(People p) {
return (T)p;
}
}
public class App
{
public static void main( String[] args )
{
People p = new People("Kewei");
GenericClass<Integer> genericClass = new GenericClass<Integer>();
Object p_object = genericClass.getCast(p);
System.out.println(p_object);
}
}
当它(T)p
在泛型方法中执行时getCast(People p)
。它只是将类型 T 作为对象吗?(T)
或者它只是在编译时删除了整个转换?我读过 Bruce Eckel 的 «Thinking in Java»,从中我大致理解为:
Java 编译器在编译时检查方法的入口/离开点,以确保泛型方法的内部一致性,并插入转换代码(在编译时)。
是正确的理解吗?
谢谢。