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

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

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

optional.isEmpty(); // only checks if the value is NULL or not.

isEmpty()方法只判断值null是否为.

public boolean isEmpty() {
    return value == null;
}

这个方法名称对我来说似乎不是很清楚.

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

推荐答案

这是Optional的定义:

可能包含也可能不包含非空值的容器对象.

由于对象本身是一个容器,它可能保存一个值,也可能不保存一个值,所以isEmpty(或isPresent)表示容器的状态,无论它是否保存一些东西.

isNull作为一个名称会暗示Optional将是null,这将是一种错误的印象,因为Optional本身就是一个适当存在的实例.

如果Optionalnull不包含非空值,那么它是不是?不,您可以查看

myOptional == null

你会发现它是假的(否则你甚至打不到isEmpty).物体在容器null内吗?如果isEmpty等于null,那么这是肯定的.因此,Optional要么是空的,要么是里面有什么东西.

Java相关问答推荐

无法在Java中将hhmmss格式的时间解析为LocalTime

int Array Stream System. out. print方法在打印Java8时在末尾添加% sign

CriteriaQuery with max

Javascript更新alert 可扩展内容样式与CSS—按钮更多/更少

为什么BasicComboBoxRenderer在文本不存在或文本为空的情况下设置两次文本?

Java LocalTime.parse在本地PC上的Spring Boot中工作,但在Docker容器中不工作

Jakarta CDI强制bean构造/注册遗留事件侦听器

如何让DTO接受空字符串字段,但如果它们不为空,则应用JPA验证?

当返回Mono<;Something>;时,不会调用Mono<;void>;.flatMap

JOOQ中的子查询使用的是默认方言,而不是配置的方言

Regex以查找不包含捕获组的行

有谁能帮我修一下这个吗?使输出变得更加整洁

我如何为我的Java抵押贷款代码执行加薪操作(&Q)

一对多关系和ID生成

项目react 堆中doOnComplete()和Subscribe()的第三个参数之间的差异

如何使用Java对随机生成的字母数字优惠券代码进行过期设置

如何使用Java ZoneID的区域设置?

无法在Java中获取ElastiCache的AWS CloudWatch指标

如何判断元素计数并在流的中间抛出异常?

双对象供应商