有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何访问。从具有泛型的类初始化?

当涉及到没有泛型的类时,我可以访问它。类属性,如下所示:

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) 个答案

  1. # 1 楼答案

    没有办法,因为type erasure。这:

    Foo<T>.class
    

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

    Foo.class
    
  2. # 2 楼答案

    您始终可以这样做:

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

    您将看到未选中的强制类型转换警告,因为它确实是不安全的,正如其他人所提到的,返回的类对象不再是“Foo<T>的类”作为“Foo<SomethingElse>的类”