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 次 |
| 最近记录: |