我已经阅读了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
是最合乎逻辑的。在我看来,第一个代码比第二个代码更清晰。
答案 0 :(得分:35)
Java 8&#39; Optional
主要用于方法的返回值,而不是Optional in Java SE 8中描述的Java类的属性:
当然,人们会做他们想做的事。但是在添加此功能时我们确实有明确的意图,并且它不是通用的
Maybe
或Some
类型,因为很多人都希望我们这样做。 我们的目的是为库方法返回类型提供一种有限的机制,其中需要一种明确的方式来表示&#34;没有结果&#34;,并使用null
来表示这种情况。绝大多数可能会导致错误。这里的关键是重点用作返回类型。 该类绝对不打算用作Java Bean的属性。见证
Optional
没有实现Serializable
,这通常是广泛使用的必要条件。对象的属性。
答案 1 :(得分:1)
我认为这是一个理论问题。
可选值的概念来自功能语言世界。这些语言通常还支持语言级别的模式匹配,并允许您对可选值进行模式匹配。
在函数式语言中,函数调用通常返回一个可选值,其他代码可以模式匹配。
我从未见过传递一个可选的参数,但这并不意味着它是一个糟糕的想法。虽然看起来很奇怪。