在龙目岛可选
Optional in Lombok
我有一个名为 Address
的 class,它看起来像这样:
@Value
class Address {
@NotNull String userId;
@NotNull String line1;
String line2;
private Address(Builder b) {
// copy everything from builder
}
// override getter for line2 so that it returns Optional<String>
public Optional<String> getLine2() {
return Optional.ofNullable(this.line2);
}
// and a Builder
public static class Builder {
// builder methods
}
}
这里我不得不写 Builder
和一个 Getter
因为,如果我想 return 在使用 Lombok 时一个 Optional,我将不得不声明 line2
作为 Optional<String>
。这将生成一个接受 Optional<String>
!
的构建器方法
还有其他方法可以将 lombok 与 Optional
一起使用吗?
答案是否定的,而且可能永远不会。
您可能做错了 :-) Optional
不是 null
的替代品,也不是防止 NullPointerException
的好方法。表示该问题无法回答,例如:空列表的平均年龄是多少
Optional
s 永远不要传递,而是尽快通过调用代码拆箱。
另见 https://www.voxxed.com/blog/2015/01/embracing-void-6-refined-tricks-dealing-nulls-java/
由于这些场景只是少数,而且 Lombok 喜欢让程序员编写更好的代码,所以我不希望 Lombok 永远支持它。
披露:我是 Lombok 开发人员。
我有一个名为 Address
的 class,它看起来像这样:
@Value
class Address {
@NotNull String userId;
@NotNull String line1;
String line2;
private Address(Builder b) {
// copy everything from builder
}
// override getter for line2 so that it returns Optional<String>
public Optional<String> getLine2() {
return Optional.ofNullable(this.line2);
}
// and a Builder
public static class Builder {
// builder methods
}
}
这里我不得不写 Builder
和一个 Getter
因为,如果我想 return 在使用 Lombok 时一个 Optional,我将不得不声明 line2
作为 Optional<String>
。这将生成一个接受 Optional<String>
!
还有其他方法可以将 lombok 与 Optional
一起使用吗?
答案是否定的,而且可能永远不会。
您可能做错了 :-) Optional
不是 null
的替代品,也不是防止 NullPointerException
的好方法。表示该问题无法回答,例如:空列表的平均年龄是多少
Optional
s 永远不要传递,而是尽快通过调用代码拆箱。
另见 https://www.voxxed.com/blog/2015/01/embracing-void-6-refined-tricks-dealing-nulls-java/
由于这些场景只是少数,而且 Lombok 喜欢让程序员编写更好的代码,所以我不希望 Lombok 永远支持它。
披露:我是 Lombok 开发人员。