将可选成员变量标记为NonNull

时间:2017-05-29 06:57:37

标签: java optional lombok non-nullable

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

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

2 个答案:

答案 0 :(得分:2)

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

您在字段中Optional<Object> objObject obj之间的区别是什么?

这两个字段都可以使用@NotNull进行注释。 使用@NotNull注释字段会给您提供与注释Optional相同的结果,但不会有任何额外的调用,例如ifPresent()。如果您想使用Optional将链接操作应用于某个字段,那么您使用Optional的方式是错误的。没有理由在字段中使用Optional

您可以在openjdk邮件列表optional discussion中阅读更多内容。

  

拥有Optional可以执行流畅的API mail.openjdk

答案 1 :(得分:1)

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

Optional类型的变量永远不应为null。 Stuart Marks的rules about use of Optional开始于:

  1. 从不使用null作为Optional变量或返回值。
  2. 如果您撰写@NonNull,那么您将获得工具帮助,以确保您不违反此重要规则。

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

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

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