Java 如何从具有泛型的类访问.class?

Java 如何从具有泛型的类访问.class?,java,generics,Java,Generics,对于没有泛型的类,我可以访问如下.class属性: class Foo{ Class<Foo> getMyClass(){ return Foo.class; } } class Foo<T>{ Class<Foo<T>> getMyClass(){ return (Foo<T>).class //this doesnt work... } } class-Foo{ 类

对于没有泛型的类,我可以访问如下.class属性:

class Foo{
    Class<Foo> getMyClass(){
        return Foo.class;
    }
}
class Foo<T>{
    Class<Foo<T>> getMyClass(){
        return (Foo<T>).class //this doesnt work...
    }
}
class-Foo{
类getMyClass(){
返回Foo.class;
}
}
但是如果Foo有一个泛型,我如何访问这个“.class”属性呢?像这样:

class Foo{
    Class<Foo> getMyClass(){
        return Foo.class;
    }
}
class Foo<T>{
    Class<Foo<T>> getMyClass(){
        return (Foo<T>).class //this doesnt work...
    }
}
class-Foo{
类getMyClass(){
return(Foo).class//这不起作用。。。
}
}
我已尝试返回
Foo.class
,但这行不通:
“无法从一个类转换到另一个类”


我如何访问
Foo
的类?

没有办法,因为。这:


您始终可以这样做:

class Foo<T>{
    Class<Foo<T>> getMyClass(){
        return (Class<Foo<T>>)(Class<?>)Foo.class
    }
}
class-Foo{
类getMyClass(){
返回(类)(类)Foo.Class
}
}

您将有未选中的强制转换警告,因为它确实是不安全的——正如其他人所提到的,返回的类对象不再是“
Foo
's class”而是“
Foo
's class”。

可能是no的重复,它不是重复的。这个问题的答案是如何从泛型类型创建实例;我的问题是关于访问模板类的类。我想通过
classx创建
Foo
的一个实例;x、 newInstance()
和的可能重复项。
由于类型擦除和
类所做的工作而没有意义。java不是C++。泛型不是模板。在上面的示例中,
x.newInstance()
将根据定义返回
Foo
,因为泛型是在运行时不存在的编译时概念,而运行时就是发生反射的时候。仅供参考如果您真的想将泛型与反射一起使用,则需要执行类型转换。编译器可能会将它们标记为不安全,因此您可能需要
@SuppressWarnings()
注释。我会反复检查以确保这些石膏确实是安全的。警告是用来帮助检测逻辑错误的,但是使用反射和泛型,确实没有安全的方法可以避免。请注意不要编写任何“未记录的特性”。但是,如果Foo.class和
Foo.class
是相同的。。。为什么我不能这样做
Class x=(Class)Foo.Class
这将产生以下错误:
不能从一个类转换到另一个类
你不能从
Foo.Class
转换到
Class
Supremo
不能替代
Supremo
。这一切归结为类型擦除,类型信息在运行时丢失,呈现此类无效的强制转换。抱歉,这是无法避免的,这是Java固有的限制。谢谢。。。看来我还得多读一些关于类型的书ereasure@Bengalaa:如果
A
B
不同且不是通配符,则永远不能从
Foo
强制转换为
Foo
。此操作有效,但仍会收到警告。。。有没有一种方法可以在没有得到警告的情况下做到这一点呢?@Martin:没有,因为实际上没有什么东西是
类。对于
Foo
,只有一个
Class
对象。