JOOQ Литая строка в Enum с конвертером в строке - PullRequest
1 голос
/ 28 октября 2019

Как задано здесь, следующий вопрос к этому # 58538732

По предложению Лукаса Эдера я написал 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 (например, xnnew A (), где x - это экземпляр QueryFeaturesTask).

Как указано, использование конвертера во время CodeGen Time в настоящее время не вариант.

1 Ответ

4 голосов
/ 28 октября 2019

Кажется, вы поместили свой DOWConverter в другой класс, создав, таким образом, внутренний класс . Я рекомендую вам разместить конвертер на верхнем уровне, в своем собственном файле, что делает его классом верхнего уровня. Если вам необходимо создать вложенный класс, убедитесь, что он не является внутренним классом, сделав его статическим:

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

В руководстве Oracle по вложенным классам это действительно хорошо объясняется .

...