【问题标题】:Initialize objects with Lombok使用 Lombok 初始化对象
【发布时间】:2020-03-31 08:12:24
【问题描述】:

我有以下对象:

    @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

(这是一个例子,是假数据)

【问题讨论】:

  • private OutputObject output = new OutputObject() 怎么样?

标签: java spring spring-boot spring-data lombok


【解决方案1】:

Lombok 不会初始化属性。 注解@Data只为类属性生成getterssetters,并覆盖toStringhashCodeequals方法。

@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
}

看看documentation

【讨论】:

    【解决方案2】:

    @Data 创建 getter 和 setter,@AllArgsConstructor 为所有字段创建构造函数,@NoArgsConstructor 创建默认构造函数。要初始化您的对象,您需要使用构造函数,例如

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

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 2023-04-08
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多