java - 为什么 guava/java 使用 possible.isPresent() 而不是Optional.isPresent(possible)?

标签 java guava option-type

关于https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained据解释,guava(以及后来的 java 8)添加了一个泛型类Optional,以清除 null 检查。

如果一个函数返回一个Optional,它要求调用者在使用它之前解开字符串。

这通常以以下形式完成

Optional<String> possible = returnAnAbsentOptional();
if(possible.isPresent()){
    System.out.println(possible.get())
}

如果 returnAnAbsentOptional 返回 null,我们就会再次遇到 NPE。

我的问题是,为什么 Guava/Java 使用 possible.isPresent() 而不是可以对 null 值做出相应 react 的Optional.isPresent(possible)?

最佳答案

Optional 的想法并不是要阻止所有的 NPE。这个想法是为了明确 API 方法可以返回不存在的值,并强制调用者意识到这一点并处理它。

当然,如果此方法返回 null 而不是Optional,您仍然会得到 NPE,但这是一个巨大的设计问题。返回Optional的方法应该返回Optional(存在或不存在),而不是null。

在 OO 语言中,使用对象的方法而不是静态方法来访问对象的状态要自然得多。

关于java - 为什么 guava/java 使用 possible.isPresent() 而不是Optional.isPresent(possible)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27089048/

相关文章:

java - Guava :从包含变量的对象列表中获取变量列表

gradle - Protobuf/ Guava 依赖性问题

java - 为什么使用工厂方法时 TypeToken 无法捕获泛型类型?

java - Java 8 中的可选链接

swift - 为什么我们需要显式地将可选类型转换为 Any?

java - Spring Boot 微服务多次访问同一个微服务

java - 删除 JSoup 抓取检索到的重复元素

Java如何正确获取List<Object>数据

java - 序列化 PHP => 反序列化 JAVA/Serialize for php in string format

MySQL - 0 或 1 个字符选择查询