【问题标题】:JOOQ Cast String to Enum with Converter inlineJOOQ 使用内联转换器将字符串转换为枚举
【发布时间】: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 时间使用转换器目前不是一种选择。

【问题讨论】:

    标签: java sql-server enums jooq


    【解决方案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.

    【讨论】:

      猜你喜欢
      • 2020-02-20
      • 2010-10-03
      • 1970-01-01
      • 2012-08-25
      • 2014-03-18
      • 2015-06-10
      • 1970-01-01
      • 2014-03-21
      相关资源
      最近更新 更多