如果我们将Optional.of方法设为私有,并且只允许Java中的Optional.ofNullable,该怎么办?除了向后兼容性会有什么问题吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果我们将Optional.of方法设为私有,并且只允许Java中的Optional.ofNullable,该怎么办?除了向后兼容性会有什么问题吗?相关的知识,希望对你有一定的参考价值。

这个问题必须更新,因为它被标记为重复,但所有链接的问题都不完全匹配试图提出的问题:

有没有理由,Optional.of(aNullableVar)是必需的,因为Optional.ofNullable(aNullableVar)检查方法内部的空指针?

作为what Savior answered,目的可能就像一个保护条款:

Object object = getObject();
Optional.of(object);
System.out.println(object.toString());

它相当于:

Object object = getObject();
Objects.requireNonNull(object);
System.out.println(object.toString());

Object object = getObject();
if (object == null) 
    throw new NullPointerException();

System.out.println(object.toString());

Java 8中的Optional.of:

public static <T> Optional<T> of(T value) 
    return new Optional<>(value);

Java 8中的Optional.ofNullable:

public static <T> Optional<T> ofNullable(T value) 
    return value == null ? empty() : of(value);

答案

Optional.of有一个双重目的,用给定的非Optional值构造null,但如果值实际上是null,也会失败。

它类似于做

Objects.requireNonNull(value);
// and then using value

所以没有什么能真正打破,你只是发现很久以后你用null值创造了Optional,当你不应该。

以上是关于如果我们将Optional.of方法设为私有,并且只允许Java中的Optional.ofNullable,该怎么办?除了向后兼容性会有什么问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

如果每个业务逻辑都不允许缺失值,为啥要使用 Optional.of 方法[重复]

我可以将我的网站资源设为私有吗?

如果构造函数在私有部分,为啥我们不能创建对象?

为啥使用 Optional.of 而不是 Optional.ofNullable?

Java8新特性--Optional

在啥情况下我们应该将类构造函数设为私有[重复]