在类中使用 Optional 作为属性是一种很好的做法吗?

2022-09-01 00:59:57

我已经读过一些关于Java 8中的目的(不幸的是我不记得在哪里),我很惊讶作者没有提到在类中使用an作为属性。OptionalOptional

由于我在课堂上经常使用可选选项,我想知道这是否是一种很好的做法。或者我是否可以最好只使用普通属性,这些属性在未设置时返回?null

注意:看起来我的问题是基于意见的,但我感觉在课堂上使用真的不是办法(在阅读了上述帖子之后)。但是,我喜欢使用它,找不到使用它的任何缺点。Optional

我想举一个例子来澄清。我有一个类,它是这样构建的:Transaction

public class Transaction {

     private Optional<Customer> = Optional.empty();
     ....

public class Transaction {

     private Customer = null;
     ....

在检查时,我认为使用比.在我看来,第一个代码比第二个代码更干净。Customertransaction.getCustomer().isPresent()transaction.getCustomer() != null


答案 1

Java 8 主要用于方法的返回值,而不是 Java 类的属性,如 Java SE 8 中的可选中所述:Optional

当然,人们会做他们想做的事。但是我们在添加此功能时确实有明确的意图,并且它不是一个通用目的或类型,就像许多人希望我们这样做的那样。我们的目的是为库方法返回类型提供一种有限的机制,其中需要有一种清晰的方式来表示“无结果”,并且用于此类方法极有可能导致错误。MaybeSomenull

这里的关键是专注于用作返回类型。该类明确不打算用作 Java Bean 的属性。见证这一点的是,不实现,这通常是作为对象的属性广泛使用所必需的。OptionalSerializable


答案 2

我认为这是一个理论问题。

可选值的概念来自函数式语言世界。这些语言通常还支持语言级别的模式匹配,并允许您在可选值上进行模式匹配。

在函数式语言中,函数调用通常返回其他代码可以进行模式匹配的可选值。

我从未见过将可选参数作为参数传递,但这并不意味着这是一个糟糕的想法。它看起来很奇怪。


推荐