Optional类没有公共构造函数。但是确提供了三个静态方法在不同情形下根据需求创建Optional实例。这个方法要求你传入一个不为空的值,可见Optional并不能完全避免NullPointerException,关键在于你是否正确以及规范地使用它。显然它会在运行期抛出ArithmeticException异常,这使得后续对于o的可能存在的操作因异常而终止。所以在调用get()方法前我们还是需要判断Optional是否包装空值。而这其实是一种很糟糕的写法,因为这种用法不但没有减少null的防御性检查,而且增加了Optional包装的过程,违背了Optional设计的初衷,因此开发中要避免这种糟糕的使用。orElse()会在Optional有值时返回它的值,否则就会返回传入的默认值。
暂无评论