【发布时间】:2014-10-22 21:35:21
【问题描述】:
我有一个泛型静态方法,我希望它返回插入的实际泛型类型的 Class 对象。
我试过这样:
@SuppressWarnings("unchecked")
public static <T> Class<T> getClassType() {
Method thisMethod;
try {
thisMethod = CommonTools.class.getMethod("getClass", new Class<?>[0]);
} catch (Exception ex) {
//ErrorLog.error(ex.getMessage(), ex);
return null;
}
Type returnType = thisMethod.getGenericReturnType();
Type tType = returnType.getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) tType;
Class<T> clazz = (Class<T>) parameterizedType.getActualTypeArguments()[0];
return clazz;
}
我的灵感是在 google code morphia library 中找到的,他们在那里使用了这样的东西:
(((Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]))
我的代码和他们的代码之间的区别在于他们调用它是为了在类中查找泛型类型 - 我希望它用于方法中。
我的代码不起作用,它属于(类)转换行。
您对如何从静态方法获取当前泛型类型有任何想法吗?
谢谢
【问题讨论】:
-
如果我没记错的话,为什么
应该是 public static Class getClassType() 的 2 倍。 -
该方法应该如何知道 T 是一个泛型参数?
-
我认为您可以使用
创建一个类族。你也可以写一个工厂,给你的父类一个类型枚举,并使用工厂根据传递的枚举值将你的类转换为特定的类型。 -
我想从静态类中使用它,你的解决方案不是我想要的
标签: java generics types static