JOOQ 使用内联转换器将字符串转换为枚举
Posted
技术标签:
【中文标题】JOOQ 使用内联转换器将字符串转换为枚举【英文标题】:JOOQ Cast String to Enum with Converter inline 【发布时间】:2020-02-23 11:30:35 【问题描述】:这里问这个#58538732的后续问题
按照 Lukas Eder 的建议,我写了一个 EnumConverter
来将 Integer
转换为 DayOfWeek
public class DOWConverter extends EnumConverter<Integer, DayOfWeek>
public DOWConverter()
super(Integer.class, DayOfWeek.class);
select
现在看起来如下
DataType<DayOfWeek> typeDOW = SQLDataType.INTEGER.asConvertedDataType(new DOWConverter() /*ERROR*/);
Field<DayOfWeek> fieldDOW = DSL.field("0", typeDOW, lecture.DAY_OF_WEEK);
create.select( ..., fieldDOW, ...)...
带有错误消息:
线程“main”java.lang.Error 中的异常:未解决的编译问题: 无法访问 QueryFeaturesTask 类型的封闭实例。必须使用 QueryFeaturesTask 类型的封闭实例来限定分配(例如 x.new A(),其中 x 是 QueryFeaturesTask 的实例)。
如上所述,在 CodeGen 时间使用转换器目前不是一种选择。
【问题讨论】:
【参考方案1】:您似乎将DOWConverter
放在另一个类中,从而创建了inner class。我建议您将转换器放在***,在它自己的文件中,使其成为***类。如果必须创建嵌套类,请通过将其设为静态来确保它不是内部类:
public class Enclosing
// Make this class here static:
public static class DOWConverter extends EnumConverter<Integer, DayOfWeek>
public DOWConverter()
super(Integer.class, DayOfWeek.class);
Oracle's tutorial on nested classes explains this really well.
【讨论】:
以上是关于JOOQ 使用内联转换器将字符串转换为枚举的主要内容,如果未能解决你的问题,请参考以下文章
C++中如何将一个字符串(string类型的)映射(转换)到枚举值(enum)