And*_*iak 6 java generics reflection
是否有机会将参数化类型分配给类引用,例如。
Class<Set> c1= Set.class; //OK
Class<Set<Integer>> c2 = Set<Integer>.class; //Makes error
Run Code Online (Sandbox Code Playgroud)
使用.class
带有类名的字面量,或getClass()
在对象上调用方法返回Class
实例,对于任何类,只有一个Class
实例与之关联。
对于泛型类型也是如此。一个类List<T>
只有一个类实例,即List.class
. 不同的类型参数不会有不同的类类型。这类似于C++
实现泛型的方式,其中每个泛型类型实例化都有一个单独的Class
实例。所以在 Java 中,你不能做Set<Integer>.class
. Java 不允许这样做,因为它没有意义,并且可能会对Class
实例数量产生错误的意图。
但是,如果你想要一个Class<Set<Integer>>
,你可以实现一些类型转换(这将是安全的),如下所示:
Class<Set<Integer>> clazz = (Class<Set<Integer>>)(Class<?>) Set.class;
Run Code Online (Sandbox Code Playgroud)
这将工作得很好。
归档时间: |
|
查看次数: |
5192 次 |
最近记录: |