8

对于没有泛型的类,我可以像这样访问这个 .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>的类?

4

2 回答 2

8

你总是可以这样做:

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

您将收到未经检查的强制转换警告,因为它确实是不安全的——正如其他人所提到的,返回的类对象不再是 "Foo<T>的类" 作为 "Foo<SomethingElse>的类"。

于 2013-07-15T07:05:44.313 回答
3

由于类型擦除,没有办法。这个:

Foo<T>.class

...无法在运行时获得,无论T. 在运行时只有这个存在:

Foo.class
于 2013-07-13T22:21:45.287 回答