假设T为类类型参数,为什么不能使用T.class
我正在编写一个下载页面的功能,并根据传递的类进行解析.
对于解析,我使用另一个函数,其签名是:ParSEObject :: parse(Class< T> classname)
<T> void downloadParse(){ ParSEObject obj; obj.parse(T.class); //<--- why compiler error here?? (whereas something like Integer.class is allowed) }
解决方法
Java泛型是通过
type erasure实现的.它们只能用于编译时检查.编译完成后,对象将被更改为最低的公共对象. (在这种情况下为Object.class).
编译的字节码不知道T是什么.
如果您想访问该类,则需要将方法更改为:
<T> void downloadParse(Class<T> cls){ ParserObject obj; obj.parse(cls); }