我正在研究Java中的泛型。
我研究过,在编译过程中,擦除会擦除所有通用信息。
在这里,我研究了所有T被Object取代。
Integer v = display(2);
String d = display("3");
public <T> T display(T i){
return i;
}
我希望它将变成
Integer v = (Integer)display(2);
String d = (String) display("3");
public Object display(Object i){
return i;
}
所以,我的假设正确吗?
谢谢。
最佳答案
你基本上有它。编译器使用通用参数类型来验证代码,但生成的字节码将替换为其他类。
对于像<T>
这样的未绑定通用参数,它将是Object
。但是,如果声明是<T extends Comparable>
,则替换的类将是Comparable
而不是Object
。
编辑:有关Java泛型的详细信息,尽管其中包含大量信息:
Java泛型常见问题解答-常见问题
http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html