我有以下两个课程:
class Generic<T>
{
}
class Foo extends Generic<Student>
{
}
在 - 的里面Generic
我有一个方法,我需要获取正在传递的类的名称T
这在Java中可能吗?我知道在 C# 中我只会使用typeof
.
我尝试执行以下操作:
String className = new TypeToken<T>() {}.getClass().getName().toString();
然而,这并没有提供名称,仅提供Generic$1
Use 获取通用超类()方法并检查是否是参数化类型然后使用返回 a 的 getActualTypeArguments() 获取所有参数Type大批,
请记住,泛型类可能使用不止一种类型,例如 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)