Инициализируйте объекты с помощью Lombok - PullRequest
1 голос
/ 31 марта 2020

У меня есть следующий объект:

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class MyComplexObject implements Serializable {
        private static final long serialVersionUID = 1L;
        private OuputObject ouput;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class OuputObject implements Serializable {
        private static final long serialVersionUID = 1L;
        private InputObject input;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class InputObject implements Serializable {
        private static final long serialVersionUID = 1L;
        private List<String> example;
    }

При создании экземпляра объекта объект не инициализируется "OuputObject" и всегда имеет значение NULL. Почему объект OuputObject и объект InputObject не создаются или инициализируются?

Когда я делаю: getInputObject (), я получаю NullPointerException

(это пример, это поддельные данные)

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Lombok не инициализирует свойства. Аннотация @Data генерирует только getters и setters для свойств класса и переопределяет метод toString, hashCode и equals.

@Data
public class MyClass {
    private String myString;
}

Создает следующий код:

public class MyClass {
    private String myString;

    public String getMyString() {
        return myString;
    }

    public void setMyString(String myString) {
        this.myString = myString;
    }

    // equals, hashcode, toString
}

Ознакомьтесь с документацией

0 голосов
/ 31 марта 2020

@Data создает методы получения и установки, @AllArgsConstructor создает конструктор для всех полей, а @NoArgsConstructor создает конструктор по умолчанию. Чтобы инициализировать ваш объект, вам нужно использовать конструктор, например

MyComplexObject mco = new MyComplexObject(new InputObject());
...