我有这个代码。它是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
也是如此。我知道last_notified
为空。根据我的逻辑,"Twitter"
作为没有last_notified
的值的所有行都应该通过。但是,看起来我失败了。
我明白OR语句是从左到右。如果第一个值返回True
,那么OR应该返回true?我错过了什么?
答案 0 :(得分:3)
关于
row2.last_notified.equals(null)
不要使用equals
方法测试null,因为冒着抛出NPE异常的风险,因为您将尝试在null变量上调用方法。始终使用==
,因为您没有测试通知引用的值,而是测试引用本身是否为空。
所以
row2.last_notified == null
还有关于
row2.frequency == "Daily"
这与您在比较错误的字符串时完全相反 - 请改用equals(...)
或equalsIgnoreCase(...)
方法。理解==
检查两个对象引用是否相同而不是您感兴趣的内容。另一方面,这些方法检查两个字符串是否具有相同的字符。同样的顺序,这就是重要的事情。
取而代之的是:
row2.frequency.equals("Daily")