我班级的一个String成员变量是Optional。使用Lombok注释@NonNull标记它是否有意义?
如果成员变量是Map而不是String,我想问同样的问题。答案会改变吗?
答案 0 :(得分:2)
可选要点是制作流畅的API。字段不是,不应该是API的一部分。
您在字段中Optional<Object> obj
和Object 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开始于:
如果您撰写@NonNull
,那么您将获得工具帮助,以确保您不违反此重要规则。
如果你不写@NonNull
,那么你只有自己的个人纪律来防止你犯错误,客户也会犯错误。
因此,您应该编写@NonNull
,它用作机器可读和机器检查的文档,该变量永远不应为空。
这不仅适用于字段(成员变量),而且适用于您使用Optional
的任何地方。