泛型如何获取java参数化集合类的类型?
在java中,我可以使用ClassName.class
获取任何类的类型。但是如果我想得到参数化(通用)集合的类型呢Collection<MyClass>.class
不起作用
这就是我想做的:
ParameterExpression<Collection<MyClass>> dateParameter = criteriaBuilder.parameter(Collection<MyClass>.class);
你可以在下面搜索框中键入要查询的问题!
在java中,我可以使用ClassName.class
获取任何类的类型。但是如果我想得到参数化(通用)集合的类型呢Collection<MyClass>.class
不起作用
这就是我想做的:
ParameterExpression<Collection<MyClass>> dateParameter = criteriaBuilder.parameter(Collection<MyClass>.class);
# 1 楼答案
由于泛型是如何在Java中实现的(类型擦除),因此没有类。只有标准的
Collection
类泛型实际上是额外的编译时检查,只能以有限的方式将其转换为生成的字节码。特别是,对象不知道实例化它们的泛型参数是什么,所以不能在运行时调用例如
instanceof
来检查这一点大多数反射调用(包括使用
Class
类)都忽略了泛型,因为无论如何都不会得到任何类型安全性。即使运行时允许您访问Collection<MyClass>
类,其add
方法仍然只需要Object
,因为这只是获取原始类型Collection
的语法糖分。Java在这里可以说是做出了正确的决定,因为它不允许这种潜在的误导性语法,因此它清楚地表明,泛型类在运行时实际上并不存在