在类中使用Optional作为属性是一个好习惯吗?

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

由于我在课堂上经常使用选项,我想知道这是不是很好。 或者我可以更好地使用普通属性,当它们未设置时返回null

注意:看起来我的问题可能是基于意见的,但我觉得在课堂上使用Optional是不可取的(在阅读上述post后)。 但是,我喜欢使用它,并且找不到使用它的任何缺点。

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

 public class Transaction { private Optional = Optional.empty(); .... 

VS

 public class Transaction { private Customer = null; .... 

在检查Customer ,我认为使用transaction.getCustomer().isPresent()比使用transaction.getCustomer() != null更合乎逻辑。 在我看来,第一个代码比第二个代码更清晰。

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

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

这里的关键是重点用作返回类型。 该类最终不打算用作Java Bean的属性。 对此的见证是Optional不实现Serializable ,这通常是广泛用作对象属性所必需的。

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

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

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

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