为什么检查 NULL 的Optional.isEmpty() 不称为 isNull()

Yeo*_*ang 2 java null option-type

这可能是一个愚蠢的问题。

当我Optional.isEmpty()在代码中使用如下所示时

Optional<List<String>> optional = Optional.of(new ArrayList<>());

optional.isEmpty(); // only checks if the value is NULL or not.
Run Code Online (Sandbox Code Playgroud)

isEmpty()方法只是检查值null是否存在。

public boolean isEmpty() {
    return value == null;
}
Run Code Online (Sandbox Code Playgroud)

这个方法名称对我来说似乎不太清楚。

我想知道为什么这个方法被命名isEmpty(),而不是isNull()因为它在幕后执行空检查?

Kon*_*lph 7

它\xe2\x80\x99s 是因为空检查是一个实现细节,而不是该方法逻辑上执行的操作。从逻辑上讲,该方法检查可选值是否为空或已占用。

\n

从技术上讲,这可以通过多种方式实现,具体取决于Optional存储其值的方式。JDK 8\xe2\x80\x99s 实现恰好使用带有空检查的引用对象,但其他实现可能会以不同的方式执行此操作。将高级接口描述与其实现相混淆是错误的。封装的全部意义在于从用户那里抽象出实现细节。

\n