EnumSet class,在运行时获取元素类型

EnumSet class, get element type at runtime

我正在尝试扩展 https://github.com/tennaito/rsql-jpa 库以支持 EnumSet 字段。

如果我对 ArgumentParser 进行硬编码以将 EnumSet 属性值转换为特定查询,那么我就可以针对数据库进行实际查询。

我的问题是给定一个查询 enumsetfield=IN=(enumvalue) ArgumentParser 得到一个 JavaType:class java.util.EnumSet 和字符串枚举值。

如何从 JavaType 获取元素类型?如果可能包含 elementType,我也可以访问 org.hibernate.jpa.criteria.path.SingularAttributePath

我最终在 SingularAttributePath 上找到了所需的信息:path.attribute.member.signature 其形式为:Ljava/util/EnumSet<Lmy.project.enum;>; - 这不是最优的,我不得不大量重写 rsql-jpa,并且我最终意识到 IN 查询对于比较两个集合毫无意义。所以现在的查询是 enumsetfield==enumvalue

您可以使用反射来获取 EnumSet class 中存储元素 class 的非 public 字段。例如,对于 OpenJDK 8,hereEnumSet 的源代码,元素 class 的字段称为 elementType。但是,这将是特定于您的 class 库实现的实现,而不是可移植的。