如果我们将 Optional.of 方法设为私有,并且只允许 Java 中的 Optional.ofNullable 怎么办?除了向后兼容,会有什么问题吗?
What if we make the Optional.of method private, and only allow Optional.ofNullable in Java; would there be any problem except backwards-compatibility?
这个问题必须更新,因为它被标记为重复,但所有链接的问题都不完全匹配试图提出的问题:
是否需要 Optional.of(aNullableVar)
,因为 Optional.ofNullable(aNullableVar)
在方法内部检查空指针?
作为,一个目的可能就像一个保护子句:
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());
Optional.of 在 Java 8:
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
Optional.of在 Java 中可为空 8:
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
Optional.of
具有双重目的,即使用给定的非 null
值构建 Optional
,但如果 failing fast值实际上是 null
。
这类似于
Objects.requireNonNull(value);
// and then using value
所以没有什么会真正破坏,你只是在很久以后才发现你使用了 null
值来创建你不应该拥有的 Optional
。
这个问题必须更新,因为它被标记为重复,但所有链接的问题都不完全匹配试图提出的问题:
是否需要 Optional.of(aNullableVar)
,因为 Optional.ofNullable(aNullableVar)
在方法内部检查空指针?
作为
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());
Optional.of 在 Java 8:
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
Optional.of在 Java 中可为空 8:
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
Optional.of
具有双重目的,即使用给定的非 null
值构建 Optional
,但如果 failing fast值实际上是 null
。
这类似于
Objects.requireNonNull(value);
// and then using value
所以没有什么会真正破坏,你只是在很久以后才发现你使用了 null
值来创建你不应该拥有的 Optional
。