gpt4 book ai didi

java - 在 OR 语句中处理 talend 中的空指针异常

转载 作者:行者123 更新时间:2023-11-29 04:32:27 24 4
gpt4 key购买 nike

我有这个代码。它是 tMap 右侧映射中的行异常过滤器:

row2.method.equals("Twitter") && (
row2.last_notified.equals(null) ||
row2.frequency.equals("Everytime") ||
(row2.frequency == "Hourly" && TalendDate.diffDate(TalendDate.addDate(row2.last_notified,1,"HH"), TalendDate.parseDate("yyyy-MM-dd HH:mm:ss", TalendDate.getDate("yyyy-MM-dd HH:mm:ss")), "HH") > 0) ||
(row2.frequency == "Daily" && TalendDate.diffDate(TalendDate.addDate(row2.last_notified,1,"dd"), TalendDate.parseDate("yyyy-MM-dd HH:mm:ss", TalendDate.getDate("yyyy-MM-dd HH:mm:ss")), "dd") > 0)
)

我有一个 nullPointerException。我知道 frequency 不是 null,method 也是。我知道 last_notified 为空。根据我的逻辑,所有以 "Twitter" 作为值且没有 last_notified 的行都应该通过。但是,看起来我失败了。

我理解 OR 语句是从左到右的。如果第一个值返回 True,那么 OR 应该返回 true 吗?我错过了什么?

最佳答案

关于

row2.last_notified.equals(null)

不要使用 equals 方法测试 null,因为这有引发 NPE 异常的风险,因为您将尝试对 null 变量调用方法。始终使用 == 代替,因为您不是在测试通知引用的值,而是在测试引用本身是否为 null。

也一样

row2.last_notified == null

也关于

row2.frequency == "Daily"

这里恰恰相反,因为您错误地比较了字符串——请改用 equals(...)equalsIgnoreCase(...) 方法。了解 == 检查两个 object references 是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的重点。

改为:

row2.frequency.equals("Daily")

关于java - 在 OR 语句中处理 talend 中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43295044/

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