假设我有一个班级列表:
List<Class<?>> classes;
如果我现在选择其中一个类,让我们说......第二个,并且想知道它是否代表String类,我会做以下事情:
classes.get(1).equals(String.class)
但我怎么知道它是否代表一般类型...说T?
class Foo<T> {
void someMethod(){
System.out.println(classes.get(1).equals(T)); //error: T cannot be resolved to a variable
}
}
我试过
T.class
(Class<T>)T
但没有任何作用。我真的很想知道这是否可能,如果是的话,如何实现它 感谢您的关注! =)
答案 0 :(得分:7)
这在Java中是不可能的,因为类型擦除(http://en.wikipedia.org/wiki/Type_erasure) - T
在运行时实际上不存在,它只作为编译器的信息存在。解决此问题的标准方法是从Class<T>
生成T
并传入{{1}}并使用该类对象。
答案 1 :(得分:2)
这是不可能的,但是你可以为你的类提供一些包装器,它们将使用一个返回类型的方法实现简单的接口,然后作为泛型类型传递给这个接口。