Java 8 新特性:Optional类
程序员文章站
2022-06-07 13:12:26
...
先总结下,java 8 的一个新特性:Optional 类~~~~是不是有点晚,不要喷我……
首先,看类定义
public final class Optional<T> {
}
没有实现 java.io.Serializable 接口,不能被实例化啊,
因此,它不应该用作类的字段。
另一种情况下也并不怎么有用,就是在将其类型用作方法或构建方法的参数时。
User user = new User("[email protected]", "1234", Optional.empty());
再次,类的构造方式
public static<T> Optional<T> empty() {
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
构造空值
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
不允许传入 NULL 值
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
允许传入 NULL 值
最后,访问Optional对象方式
public boolean isPresent() {
return value != null;
}
判断是否存在
public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}
接受consumer 操作
思考:
Optional除了给null值命名所带来的代码可阅读性的提高,最大的好处莫过于Optional是傻瓜式的。Optional对象的使用强迫你去积极的思考这样一种情况,如果你想让你的程序返回null值,这null值代表的含义是什么,因为你想要取得返回值,必然从Optional对象内部去获得,所以你必然会这么去思考。但是只是简单的使用一个Null值会很轻易的让人忘记去思索代码所要表达的含义到底是什么,尽管FindBugs有些帮助,但是我们还是认为它并没有尽可能的解决好帮助程序员去思索null值代表的含义这个问题。 这种思考会在你返回某些存在的值或者不存在的值的时候显得特别相关。和其他人一样,你绝对很可能会忘记别人写的方法method(a,b)可能会返回一个null值,就好像当你去写method(a,b)的实现时,你也很可能忘记输入参数a也可以是null。如果返回的是Optional对象,对于调用者来说,就可以忘却怎么去度量null代表的是什么含义,因为他们始终要从optional对象中去获得真正的返回值。