有没有一种方法可以避免类型删除并访问类型参数?
public class Foo<T extends Enum<?> & Bar> {
public Foo() {
// access the template class here?
// i.e. :
baz(T.class); // obviously doesn't work
}
private void baz(Class<T> qux) {
// do stuff like
T[] constants = qux.getEnumConstants();
...
}
}
我需要了解T
,并用它做事。是否可能,如果可以,如何不在构造函数中或参数以外的任何地方传递类?
编辑:这个问题的主要目的是找出是否有围绕类型删除的任何实用方法。
最佳答案
AFACT,没有绕过类型删除的实用方法,因为您不能请求运行时无法访问的内容。当然,假设您同意为每个实现 Bar
接口(interface)的枚举创建通用类的子类是一个实际的解决方法。
enum Test implements Bar {
ONE, TWO
}
class Foo<T> extends FooAbstract<Test> {
public Foo() {
ParameterizedType genericSuperclass =
(ParameterizedType) getClass().getGenericSuperclass();
baz((Class<T>) genericSuperclass.getActualTypeArguments()[0]);
}
private void baz(Class<T> qux) {
T[] constants = qux.getEnumConstants();
System.out.println(Arrays.toString(constants)); // print [ONE, TWO]
}
}
interface Bar {
}
class FooAbstract<T extends Enum<?> & Bar> {
}
关于java - 避免 Java 类型删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8452893/