Java:如何从泛型类型中获得类文字?通常,我看到人们使用类文字如下:Class<Foo> cls = Foo.class;但是,如果类型是通用的,例如列表呢?这很好,但是有一个警告,因为List应该参数化:Class<List> cls = List.class那么为什么不添加一个<?>?这会导致类型错配错误:Class<List<?>> cls = List.class我想像这样的东西会起作用,但这只是简单的语法错误:Class<List<Foo>> cls = List<Foo>.class我怎么才能得到Class<List<Foo>>静态的,例如使用类文字?I 能使用@SuppressWarnings("unchecked")为了消除第一个示例中由于非参数化使用List引起的警告,Class<List> cls = List.class但我不想。有什么建议吗?
3 回答
UYOU
TA贡献1878条经验 获得超4个赞
List<Integer> list1 = new ArrayList<Integer>();List<String> list2 = (List<String>)list1;list2.add("foo"); // perfectly legal
Field.getGenericType()
Object.getClass()
public final native Class<?> getClass();
Class<?>
.
为什么没有具体参数化类型的类文字? 因为参数化类型没有精确的运行时类型表示。
类文字表示 Class
表示给定类型的。例如,类文字 String.class
表示 Class
表示类型的 String
并且与 Class
方法时返回的 getClass
在 String
对象。类文字可用于运行时类型检查和反射。
在名为类型擦除的过程中,参数化类型在编译过程中被转换为字节码时,会丢失它们的类型参数。作为类型擦除的副作用,泛型类型的所有实例化都共享相同的运行时表示,即对应的原始类型的运行时表示。换句话说,参数化类型没有它们自己的类型表示形式。因此,没有必要形成类文字,例如 List<String>.class
,List<Long>.class
和 List<?>.class
,因为没有 Class
物体存在。只有原始类型 List
有一个 Class
表示其运行时类型的。它被称为 List.class
.
添加回答
举报
0/150
提交
取消