1

有一个包含类 B 的简单类 A 是否有任何 lombok 注释可以在为空的情况下创建类 b 的新实例?

public class A {

   @Getter
   @Setter
   private B b;

}
4

1 回答 1

5

恐怕该功能不存在。该文档列出了注释的许多配置键,但未列出您所追求的功能。

最近有人在Lombok GitHub 页面上要求这样的东西:

在这种情况下,我会喜欢这个功能:

@Getter(lazy = true) private List<String> foo = new ArrayList<>(); 生成这样的东西:

private List<String> foo;
public List<String> getFoo() {
    if (this.foo == null) {
        this.foo == new ArrayList<>();
    }
    return this.foo;
}

当然,它可以使用双重检查锁定或 AtomicReference,但这里的重点是我宁愿得到一个空列表而不是空引用。例如,这是 JAXB 类中的一个常见习惯用法,可以很好地使用 Lombok 减小大小。

因此,该功能尚未(尚未?)实施。如果我是你,我会避免在这些情况下使用注释,而是手动创建想要的方法。


GitHub issue 于 2020 年 2 月 20 日被搁置。部分动机如下:

此外,这意味着调用 getter 具有明显的可观察到的副作用,这听起来是个非常糟糕的主意。惰性 getter 的当前 impl 很好,因为首先无法从实用的角度访问该字段,并且 getter 似乎是幂等的。这与您的提案相反,该字段仍然可以访问。

我想这使得该功能更不可能实现。

于 2016-06-28T19:18:39.240 回答