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

时间:2015-03-13 13:31:29

标签: java java-8 optional

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

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

注意:看起来我的问题看起来像是基于意见的,但我觉得在课堂上使用Optional的感觉真的不是要走的路(看完上面提到的帖子后) 。但是,我喜欢使用它,并且找不到使用它的任何缺点。

示例

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

public class Transaction {

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

VS

public class Transaction {

     private Customer = null;
     ....

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

2 个答案:

答案 0 :(得分:35)

Java 8&#39; Optional主要用于方法的返回值,而不是Optional in Java SE 8中描述的Java类的属性:

  

当然,人们会做他们想做的事。但是在添加此功能时我们确实有明确的意图,并且它不是通用的MaybeSome类型,因为很多人都希望我们这样做。 我们的目的是为库方法返回类型提供一种有限的机制,其中需要一种明确的方式来表示&#34;没有结果&#34;,并使用null来表示这种情况。绝大多数可能会导致错误。

     

这里的关键是重点用作返回类型。 该类绝对不打算用作Java Bean的属性。见证Optional没有实现Serializable,这通常是广泛使用的必要条件。对象的属性。

答案 1 :(得分:1)

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

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

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

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