Java:是否可以将Class <! - ? - >对象与泛型类型参数进行比较?

时间:2014-11-12 09:51:49

标签: java generics

假设我有一个班级列表:

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

但没有任何作用。我真的很想知道这是否可能,如果是的话,如何实现它 感谢您的关注! =)

2 个答案:

答案 0 :(得分:7)

这在Java中是不可能的,因为类型擦除(http://en.wikipedia.org/wiki/Type_erasure) - T在运行时实际上不存在,它只作为编译器的信息存在。解决此问题的标准方法是从Class<T>生成T并传入{{1}}并使用该类对象。

答案 1 :(得分:2)

这是不可能的,但是你可以为你的类提供一些包装器,它们将使用一个返回类型的方法实现简单的接口,然后作为泛型类型传递给这个接口。