gpt4 book ai didi

Java - 获取泛型类的名称

转载 作者:行者123 更新时间:2023-11-30 05:50:09 25 4
gpt4 key购买 nike

我有以下两个类(class):

class Generic<T> 
{

}

class Foo extends Generic<Student>
{

}

Generic内部,我有一个方法,我需要获取通过T传递的类的名称

这在 Java 中可能吗?我知道在 C# 中我只会使用 typeof

我尝试执行以下操作:

String className = new TypeToken<T>() {}.getClass().getName().toString();

但是,这不提供名称,仅提供 Generic$1

最佳答案

使用 getGenericSuperclass() 方法并检查是否为 ParameterizedType然后使用返回 Type 数组的 getActualTypeArguments() 获取所有参数,请记住,泛型类可能会使用不止一种类型,例如 Map (Map )

public Class<?> getGenericType(Object obj) {
Class<?> genericType = null;
Type gnrcType = obj.getClass().getGenericSuperclass();
if (gnrcType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) gnrcType;
Type types[] = parameterizedType.getActualTypeArguments();

if (types != null && types.length > 0) {
Type type = types[0];
if (type instanceof Class) {
genericType = (Class<?>) type;
}
}
}
return genericType;
}

关于Java - 获取泛型类的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54044100/

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