Ломбок: RequiredArgsConstructor не работает

Кажется, что @RequiredArgsConstructor не работает в приведенном ниже коде. Почему это?

import java.io.Serializable;

import lombok.Data;
import lombok.RequiredArgsConstructor;

@Data
@RequiredArgsConstructor
public class User implements Serializable {

    private String username;

    /*public User(String username) {
        this.username = username;
    }*/

    private static final long serialVersionUID = 8043545738660721361L;
}

Я получаю сообщение об ошибке:

javax.faces.el.EvaluationException: java.lang.Error: Unresolved compilation problem: 
    The constructor User(String) is undefined

По какой-то причине кажется, что это работает для другого класса предметной области, в котором конструктор не определен, но вместо этого используется аннотация @RequiredArgsConstructor.


person rozerro    schedule 07.06.2016    source источник


Ответы (6)


Согласно документации, обязательными аргументами являются окончательные поля и поля с ограничениями, такими как @NonNull.

Вам нужно сделать имя пользователя как @NonNull

@NonNull private String username;

И вам нужно сделать их окончательными тоже.

person a3.14_Infinity    schedule 07.06.2016
comment
И final полей! Не забудьте final полей. final поля часто не пользуются особой популярностью (повторение сделано намеренно =D) - person Augusto; 07.06.2016
comment
Если вы уже использовали final и/или @NonNull, попробуйте использовать ручной конструктор, чтобы сузить проблему. Стратегию отладки можно найти здесь: janac.medium.com/ - person Janac Meena; 12.11.2020

Также стоит отметить для будущих читателей, что @Data также предоставляет @RequiredArgsConstructor, поэтому использовать обе аннотации не обязательно :)

person adrianostgard    schedule 26.07.2018
comment
Когда вы используете @Data в сочетании с другими аннотациями конструктора, такими как @NoArgsConstructor, тогда @RequiredArgsConstructor не будет генерироваться автоматически. - person stand alone; 18.09.2019

Вы установили плагин Lombok в IntelliJ?

Если нет, то

File -> Settings -> Plugins: Search for Lombok (CodeStream) version.

Перезапустите IDE, и это должно быть исправлено.

Проверьте дважды:

  • У вас установлена ​​библиотека Lombok с использованием Maven или Gradle.
  • Включено Annotation Processors из IntelliJ IDE с File -> Settings: Search for Annotation Processors
person HA S    schedule 17.10.2019
comment
Я не знал о плагине. Спасибо, это работает для меня. - person Safwan Shaikh; 25.10.2019

@RequiredArgsConstructor

> Generates a constructor with required arguments. Required arguments
 are final fields and fields with constraints such as @NonNull.
> Complete documentation is found at the project lombok features page
for @Constructor.
> Even though it is not listed, this annotation also has the
 *`onConstructor`* parameter. See the full documentation for more details.

Библиотека Ломбока

Чтобы использовать @RequiredArgsConstructor, переменная должна быть final, и она автоматически создаст значения в конструкторе.

private final String username;
person Manimaran Samuthirapandi    schedule 11.05.2021

Попробуйте изменить проект/модуль JDK на 1.8.

Структура проекта -> Настройки проекта -> SDK проекта и уровень языка проекта

person Harinath    schedule 18.02.2020
comment
это действительно помогло, даже после переключения обратно на 14 ошибка исчезла - person dermoritz; 11.08.2020

Поля аргументов для аннотации @RequiredArgsConstructor должны быть final. Итак, это исправление будет работать:

private final String username;

IDE IntelliJ делает переменную серой (неактивный статус), когда пропущено ключевое слово final, что очень полезно для обнаружения такого рода ошибок.

person Eric Tan    schedule 17.12.2020