我有以下两节课:
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
然后使用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;
}