如何从具有Generic的类访问.class?

时间:2013-07-13 22:06:38

标签: java generics

对于没有泛型的类,我可以像这样访问这个.class属性:

class Foo{
    Class<Foo> getMyClass(){
        return Foo.class;
    }
}

但是如果Foo具有泛型,我如何访问这个“.class”属性?像这样:

class Foo<T>{
    Class<Foo<T>> getMyClass(){
        return (Foo<T>).class //this doesnt work...
    }
}

我试图返回Foo.class,但这不起作用:"cannot cast from Class<Foo> to Class<Foo<T>>"

我如何访问Foo<T>的课程?

2 个答案:

答案 0 :(得分:8)

您可以随时执行此操作:

class Foo<T>{
    Class<Foo<T>> getMyClass(){
        return (Class<Foo<T>>)(Class<?>)Foo.class
    }
}

您将获得未经检查的强制转换警告,因为它确实不安全 - 正如其他人所提到的那样,返回的类对象不再是“Foo<T>的类”作为“Foo<SomethingElse>的类”

答案 1 :(得分:4)

由于type erasure,没有办法。这样:

Foo<T>.class

...无法在运行时获取,无论T的类型是什么,它都将始终是相同的类型。在运行时只存在:

Foo.class