是否可以在运行时获取类型参数?

2023-12-10

我知道在 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(使用前将#替换为@)

是否可以在运行时获取类型参数? 的相关文章

随机推荐