首页 文章

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

提问于
浏览
7

当涉及没有泛型的类时,我可以像这样访问这个.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 回答

  • 4

    由于type erasure,没有办法 . 这个:

    Foo<T>.class
    

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

    Foo.class
    
  • 7

    你总是可以这样做:

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

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

相关问题