1

如此处所问,对此#58538732的后续问题

正如 Lukas Eder 所建议的,我写了一个EnumConverterIntegerDayOfWeek

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 类型的封闭实例来限定分配(例如,xnew A(),其中 x 是 QueryFeaturesTask 的实例)。

如前所述,在 CodeGen 时间使用转换器目前不是一种选择。

4

1 回答 1

4

似乎您将您的DOWConverterinside 放在了另一个类中,从而创建了一个内部类。我建议您将转换器放在顶级,在它自己的文件中,使其成为顶级类。如果您必须创建一个嵌套类,请通过将其设为静态来确保它不是内部类:

public class Enclosing {
    // Make this class here static:
    public static class DOWConverter extends EnumConverter<Integer, DayOfWeek> {
        public DOWConverter() {
            super(Integer.class, DayOfWeek.class);           
        }               
    }
}

Oracle 的嵌套类教程很好地解释了这一点

于 2019-10-28T07:42:21.170 回答