在Java中获取泛型类型参数的类
我有一个类需要处理扩展Number
类的对象。为此,我使用类型参数T
。但是,类中的一些函数需要知道T
是什么类(例如,返回与T
相同类的对象)
到处弹出的解决方案Class<T> clazz = (Class<T>) ((ParameterizedType) getClass().getSuperClass()).getActualTypeArguments()[0];
看起来很有希望,因为我可以使用isAssignableFrom
。但是,getActualTypeArguments[0]
部分返回一个TypeVariableImpl
,这显然意味着我需要做一些不同的事情
更具体地说,我目前拥有的代码如下所示:
public class Outer {
//Sole purpose of the Dummy class is for the getGenericSupertype() method.
private static abstract class Dummy<T> {
private Class<T> clazz;
@SuppressWarnings("unchecked")
public Dummy() {
clazz = (Class<T>) ((ParameterizedType)
getClass().getGenericSuperclass())
.getActualTypeArguments()[0]; //ClassCastException
}
public Class<T> getClazz() {
return clazz;
}
}
public static class Foo<T extends Number> extends Dummy<T> {
private Class<T> typeOfNumber;
//...
public Foo() {
typeOfNumber = getClazz();
//...
}
public Foo(T number) {
this();
//...
}
//...
private boolean isA(Class<?> type) {
return type.isAssignableFrom(typeOfNumber);
}
public T toThisType(double x) {
if(isA(Integer.class))
return new Integer((int) x);
//...
}
}
//Several functions that use Foo were omitted for brevity.
}
我打算在其他类中扩展Outer
,然后为某些操作创建Foo
对象。如果可能,我不想在任何构造函数中放入类似Class<T> clazz
的内容。简言之,声明为new Foo<Integer>()
的对象有没有办法知道T
是一个Integer
共 (0) 个答案