gpt4 book ai didi

java - 在静态方法中获取实际泛型类型的类对象

转载 作者:行者123 更新时间:2023-12-04 18:06:04 25 4
gpt4 key购买 nike

我有一个泛型静态方法,我希望它返回插入的实际泛型类型的 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]))

我的代码和他们的代码之间的区别在于,他们调用它是为了在类中查找泛型类型——我希望它在方法中使用。

我的代码不起作用,它属于(类)转换行。

你知道如何从静态方法中获取当前泛型类型吗?

谢谢

最佳答案

这是行不通的。你得到方法 getClass ,它基本上有返回类型 Class<CommonTools> , 然后你调用 getActualTypeArguments ,这将返回 Class<CommonTools> ,因为 TypeArgument 是 CommonTools。

如果您要调用Class<CommonTools> ct = getClassType();它会起作用,但是没有必要获得此类信息。

据我所知,无法获取该信息,因为 JVM 会在运行时删除所有通用信息。最简单的解决方案是 CommonTools会得到 Class<T>创建实例,并将返回它,但它并不常见。

关于java - 在静态方法中获取实际泛型类型的类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26508128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com