关于Java 8的Optional的介绍

我最近发现了JDK 8中Optional类型的添加。 Optional类型是避免NullPointerException一种方法,因为从方法中获取Optional返回值的API使用者被“强制”执行“在线”检查,以消耗其实际返回值。 更多细节可以在Javadoc中看到。 可以在此博客文章中找到非常有趣的进一步阅读,该文章比较了null的一般概念以及在Java,SML和Ceylon中如何处理nullhttp : //blog.informatech.cr/2013/04/10/ java-optional-objects。 图灵已经知道“空白”和“初始”状态。 有人可能会说, 巴贝基引擎需要“中立”或“零”状态,这可以追溯到1800年代的Lovelace。

另一方面,数学家也更喜欢将“无”与“空集”区分开来,“空集”是“内部没有任何东西的集” 。 例如,这与前面提到的Informatech博客文章中说明的和由Scala实现的“ NONE”和“ SOME”比较好。 无论如何,我已经考虑了Java的Optional 。 我真的不确定我是否会喜欢它,即使Java 9最终会在JLS中添加一些语法糖,类似于Ceylon的语法糖,以在语言级别使用Optional 。 由于Java是如此向后兼容,因此将不对现有的API进行任何改进以返回Optional ,例如,以下内容不会浮出水面的JDK 8:

public interface List<E> {
    Optional<E> get(int index);
    [...]
}

我们不仅可以将null分配给Optional变量,而且缺少“ Optional”也不能保证“ SOME”的语义,因为列表仍然会返回“裸” null值。 当我们将两种思维方式结合在一起时,我们将得到两种检查,而不是一种

Optional<T> optional = // [...]
T nonOptional = list.get(index);

// If we're paranoid, we'll double-check!
if (optional != null && optional.isPresent()) {
    // do stuff
}

// Here we probably can't trust the value
if (nonOptional != null) {
    // do stuff
}

因此……从我到Java的解决方案为-1

进一步阅读

当然,这已经被数百万次讨论过了。 因此,这里有几个链接:

参考: 在Java 8中 ,我们的JCG合作伙伴 Lukas Eder在Java,SQL和JOOQ博客上对Optional的介绍

翻译自: https://www.javacodegeeks.com/2013/04/on-java-8s-introduction-of-optional.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值