Java 在静态方法中获取实际泛型类型的类对象
我有一个泛型静态方法,我希望它返回插入的实际泛型类型的类对象 我试过这样做:Java 在静态方法中获取实际泛型类型的类对象,java,generics,types,static,Java,Generics,Types,Static,我有一个泛型静态方法,我希望它返回插入的实际泛型类型的类对象 我试过这样做: @SuppressWarnings("unchecked") public static <T> Class<T> getClassType() { Method thisMethod; try { thisMethod = CommonTools.class.getMethod("getClass", new Class<?>[0]); }
@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;
}
(((Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]))
@SuppressWarnings(“未选中”)
公共静态类getClassType(){
方法本法;
试一试{
thisMethod=CommonTools.class.getMethod(“getClass”,新类[0]);
}捕获(例外情况除外){
//ErrorLog.error(例如getMessage(),例如);
返回null;
}
类型returnType=thisMethod.getGenericReturnType();
类型tType=returnType.getClass().getGenericSuperclass();
ParameteredType ParameteredType=(ParameteredType)tType;
类clazz=(类)ParameteredType.getActualTypeArguments()[0];
回击声;
}
我的灵感来源于谷歌代码morphia库,在那里他们使用了类似的东西:
@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;
}
(((Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]))
((类)((参数化类型)getClass().getGenericSuperclass()).getActualTypeArguments()[0]))
我的代码和他们的代码之间的区别在于,他们调用它是为了在类中查找泛型类型——我希望在方法中使用它
我的代码不工作,它在(类)转换行中
您知道如何从静态方法获取当前泛型类型吗
谢谢它不会工作的。您将获得方法
getClass
,它基本上具有返回类型Class
,然后您将调用getActualTypeArguments
,它将返回Class
,因为TypeArguments是CommonTools
如果您将调用classct=getClassType()代码>它会起作用,但是没有必要拥有这样的信息
据我所知,没有办法获得这些信息,因为JVM在运行时会擦除所有的通用信息。
最简单的解决方案是,CommonTools
将在创建时获取Class
实例,并返回它,但它不是那么常见。为什么它应该是公共静态类getClassType()的2倍如果我没有错的话,那么这个方法应该如何知道T是一个泛型参数呢?我想你可以使用创建一个类家族。你也可以写一个工厂,给你的父类一个类型enum,然后使用工厂根据传递的enum值将你的类转换成特定的类型。我想从静态类使用它,你的解决方案不是我想要的好吧,所以在java中不可能在运行时知道方法的泛型类型?是的,读这里:还有这里