我知道在 Java 中,由于擦除,我们在运行时没有参数化类型。但是是否有可能在运行时获取那些被擦除的参数呢?让我举一些例子:
public class MyClass<T>{ };
public static void foo(MyClass<?> p){
//do staff
}
public void main(String[] args){
MyClass<Integer> i = new MyClass<Integer>();
foo(i);
}
现在,我们通过了i
to foo
作为一个论点。是否可以在境内查询foo
的body是什么类型的参数i
被实例化为?也许某些反射工具在运行时保留该信息?
您可以做的另一件事:
private Class<T> type;
public MyClass(Class<T> type) {
this.type = type;
}
public Class<T> getType() {
return type;
}
然后你会像这样实例化:
MyClass<Integer> i = new MyClass<Integer>(Integer.class);
不是最好的方法,但它解决了问题。您可以访问 foo 内部的类型:
p.getType();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)