Комната не может найти конструктор - PullRequest
0 голосов
/ 05 июля 2018

Я использую lombok для генерации конструкторов, геттеров и сеттеров для моих моделей. Когда я пытаюсь использовать lombok для генерации конструктора для моего класса сущностей, я получаю эту ошибку

Error:(14, 8) error: Entities and Pojos must have a usable public 
constructor. You can have an empty constructor or a constructor whose 
parameters match the fields (by name and type).
Tried the following constructors but they failed to match:
Region(int,java.lang.String,java.lang.String) -> [param:arg0 -> matched 
field:unmatched, param:arg1 -> matched field:unmatched, param:arg2 -> 
matched field:unmatched]

но написание конструктора вручную работает. Может кто-нибудь помочь мне разобраться в чем дело?

Мой класс сущности показан ниже

@Value
@Entity
public class Region {
    @PrimaryKey
    private int regionId;
    private String name;
    private String code;
}

Версия номера: 1.1.0 Ломбок версия: 1.16.20

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Попробуйте, как показано ниже, с аннотацией @Data.

    @Value
    @Entity
    @Data
    public class Region {
        @PrimaryKey
        private int regionId;
        private String name;
        private String code;
    }
0 голосов
/ 11 февраля 2019

Вы можете использовать следующие настройки:

@Entity
@Getter
@Setter
@AllArgsConstructor(onConstructor = @__({@Ignore}))
@NoArgsConstructor
public class Region {
    @PrimaryKey
    private int regionId;
    private String name;
    private String code;
}

Это заставит Room использовать конструктор по умолчанию и установить значение с помощью предоставленных сеттеров. Кроме того, у вас есть конструктор, который принимает все аргументы для создания экземпляров объекта, но будет игнорироваться Room.

Примечание: объект не будет неизменным таким образом

0 голосов
/ 09 июля 2018

Сопоставление, по-видимому, не выполняется, поскольку имена параметров конструктора недоступны во время выполнения. Начиная с версии 1.16.20, lombok больше не генерирует аннотации @ConstructorProperties (которые будут содержать эти имена). Попробуйте добавить lombok.anyConstructor.addConstructorProperties = true к вашему lombok.config, и lombok сгенерирует аннотацию @ConstructorProperties для вашего конструктора. (Подробнее о том, как настроить lombok, см. https://projectlombok.org/features/configuration.)

РЕДАКТИРОВАТЬ: проблема заключается в обработке аннотации во время компиляции. И Room, и lombok подключаются к javac как процессоры для аннотаций, и они не очень хорошо работают в комбинации. Так что на данный момент единственное стабильное решение - это сначала деломбок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...