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

时间:2019-03-18 13:31:57

标签: java generics type-erasure

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

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

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

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

2 个答案:

答案 0 :(得分:0)

我最终在SingularAttributePath:path.attribute.member.signature上找到了所需的信息,其格式为:Ljava/util/EnumSet<Lmy.project.enum;>;-这不是最佳选择,我不得不重写很多rsql-jpa,我结束了意识到,对于比较两个集合,IN查询几乎没有意义。现在查询为enumsetfield==enumvalue

答案 1 :(得分:0)

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