关于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/