Java 处理talend in或语句中的null指针异常

Java 处理talend in或语句中的null指针异常,java,talend,Java,Talend,我有这个密码。它是tMap右侧映射中的行异常过滤器: row2.method.equals("Twitter") && ( row2.last_notified.equals(null) || row2.frequency.equals("Everytime") || (row2.frequency == "Hourly" && TalendDate.diffDate(TalendDate.addDate(row2.last_notifi

我有这个密码。它是
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
method
一样不是空的。我知道上次通知的
为空。根据我的逻辑,所有带有
“Twitter”
值且没有
上次通知的行都应该通过。然而,看起来我失败了

我明白,或陈述从左到右。如果第一个值返回
True
,则OR应返回True?我错过了什么?

关于

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

我也是

也关于

row2.frequency == "Daily"
这里的情况正好相反,因为比较字符串是错误的——请改用
equals(…)
equalsIgnoreCase(…)
方法。了解
==
检查两个对象引用是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的问题所在

相反,你应该:

row2.frequency.equals("Daily")

这太棒了!非常感谢你。如果时间允许,我会接受的。
row2.frequency.equals("Daily")