【发布时间】:2015-05-16 00:15:50
【问题描述】:
我读过一些关于 Java 8 中 Optional 用途的文章(不幸的是我不记得在哪里),我很惊讶作者没有提到使用 Optional 作为类中的属性.
由于我在课堂上经常使用可选项,我想知道这是否是一个好习惯。或者我最好只使用普通属性,当它们未设置时返回null?
注意:看起来我的问题是基于意见的,但我觉得在课堂上使用Optional 真的不是要走的路(在阅读了提到的帖子之后)。但是,我喜欢使用它,并且找不到使用它的任何缺点。
示例
我想举个例子来澄清一下。我有一个类Transaction,它是这样构建的:
public class Transaction {
private Optional<Customer> = Optional.empty();
....
对比
public class Transaction {
private Customer = null;
....
检查Customer 时,我认为使用transaction.getCustomer().isPresent() 比使用transaction.getCustomer() != null 更合乎逻辑。在我看来,第一个代码比第二个更干净。
【问题讨论】:
-
@AdamSiemion 我们在这里谈论的是 Guava 的
Optional还是 Java 8 的Optional? -
@AdamSiemion 感谢您的链接!我没有那么有经验,所以不知道番石榴已经有了。但是,这里提到的主要原因是
Optional具有三种可能性:存在、不存在和空。 Java 8 已经不存在了,所以这个论点不再有效.. -
@bashoogzaad 无论是三个(null,absent,present)还是两个选项(null/empty,present)都不会改变
Optional的用途。 -
@Jesper 我认为
Optional的目的在 Guava 和 Java 8 中是相同的,不是吗? -
@AdamSiemion Java 8
Optional的设计者清楚地知道它的用途(见我的回答)。 Guava 的设计者可能有不同的想法。 Guava 的Optional确实实现了Serializable而Java 8 的Optional没有,这表明Guava 的Optional可能比Java 8 更适合字段。