gpt4 book ai didi

java - 如何避免 lambda 比较器中的 NullPointerExceptions?

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:31 25 4
gpt4 key购买 nike

我想比较两个在运行时可能为空的给定对象。在我的示例中:

@Test
public void shouldCompareAgents() {

Agent a1 = new Agent();
a1.setId("4711");
a1.setType(null);

Agent a2 = new Agent();
a2.setId(a1.getId());
a2.setType(a1.getType());

assertEquals("Agent.getId", 0,
Comparator.comparing(Agent::getId).compare(a1, a2));

assertEquals("Agent.getType", 0,
Comparator.comparing(Agent::getType).compare(a1, a2));
}

按 id 的断言工作正常,按类型不正确,因为 a1.getType() 为 null。有没有办法避免这种情况?我尝试了 Comparator.nullsLast(...),但这毫无意义,因为我没有在此处对元素进行排序。

我有很多断言要做,所以我更喜欢“一行”。我是 lambda 表达式的新手。

最佳答案

如果您只想在 JUnit 测试中使用它,为什么不直接将要比较的对象传递给 assertEquals 方法呢?

assertEquals("Agent.getId", a1.getId(), a2.getId());

这也有助于 JUnit 在测试失败时生成有用的错误消息。

如果你想在生产代码中这样做,你可以使用Objects.equals:

if (Objects.equals(a1.getId(), a2.getId())) { ... }

自 Java 7 以来就存在。

关于java - 如何避免 lambda 比较器中的 NullPointerExceptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com