有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

泛型如何获取java参数化集合类的类型?

在java中,我可以使用ClassName.class获取任何类的类型。但是如果我想得到参数化(通用)集合的类型呢Collection<MyClass>.class不起作用

这就是我想做的:

ParameterExpression<Collection<MyClass>> dateParameter = criteriaBuilder.parameter(Collection<MyClass>.class);

共 (1) 个答案

  1. # 1 楼答案

    由于泛型是如何在Java中实现的(类型擦除),因此没有类。只有标准的Collection

    泛型实际上是额外的编译时检查,只能以有限的方式将其转换为生成的字节码。特别是,对象不知道实例化它们的泛型参数是什么,所以不能在运行时调用例如instanceof来检查这一点

    大多数反射调用(包括使用Class类)都忽略了泛型,因为无论如何都不会得到任何类型安全性。即使运行时允许您访问Collection<MyClass>类,其add方法仍然只需要Object,因为这只是获取原始类型Collection的语法糖分。Java在这里可以说是做出了正确的决定,因为它不允许这种潜在的误导性语法,因此它清楚地表明,泛型类在运行时实际上并不存在