假设我有一个类列表:
List<Class<?>> classes;
Run Code Online (Sandbox Code Playgroud)
如果我现在采用其中一个类,让我们说...第二个,并且想知道它是否代表String类,我会做以下事情:
classes.get(1).equals(String.class)
Run Code Online (Sandbox Code Playgroud)
但我怎么知道它是否代表一种通用类型......说T?
class Foo<T> {
void someMethod(){
System.out.println(classes.get(1).equals(T)); //error: T cannot be resolved to a variable
}
}
Run Code Online (Sandbox Code Playgroud)
我试过了
T.class
(Class<T>)T
Run Code Online (Sandbox Code Playgroud)
但没有任何作用.我真的想知道这是否可能,如果可能的话,如何实现它.
感谢您的关注!=)
由于类型擦除(http://en.wikipedia.org/wiki/Type_erasure),这在Java中是不可能的- T在运行时实际上不存在,它仅作为编译器的信息存在.解决这个问题的标准方法是Class<T>从任何地方传入a T并使用该类对象.