3

我班级的 String 成员变量之一是可选的。用 Lombok 注释 @NonNull 标记它是否有意义?

如果成员变量是 Map 而不是 String,我想问同样的问题。答案会改变吗?

4

2 回答 2

2

可选的要点是制作流畅的API。字段不是也不应该是API 的一部分。

Optional<Object> obj领域之间和Object obj领域对您来说有什么区别?

这两个字段都可以用 注释@NotNull。用 注释字段@NotNull会给您与注释 an 相同的结果,Optional但没有任何额外的调用,例如ifPresent(). 如果您想使用Optional将链接操作应用于字段 - 您使用Optional的方式错误。没有理由Optional在现场使用。

您可以在 openjdk 邮件列表可选讨论中阅读更多内容。

拥有 Optional 可以实现流畅的 API mail.openjdk

于 2017-05-29T08:02:17.210 回答
1

是的,您应该将每个Optional变量标记为@NonNull.

Optional 类型的变量永远不应为空。Stuart Marks关于使用 Optional 的规则以:

  1. 永远不要将 null 用于 Optional 变量或返回值。

如果您编写@NonNull,那么您将获得工具帮助以确保您不违反此重要规则。

如果你不写@NonNull,那么你只有自己的个人纪律来防止你犯错误,客户也可能犯错误。

因此,您应该编写@NonNull,作为机器可读和机器检查的文档,该变量不应为空。

这不仅适用于字段(成员变量),还适用于您使用的任何地方Optional

于 2017-05-30T03:35:07.487 回答