在 OR 语句中处理 talend 中的空指针异常
handling null pointer exception in talend in OR statement
我有这个代码。它是 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 应该 return 为真?我错过了什么?
关于
row2.last_notified.equals(null)
不要使用 equals
方法测试 null,因为这有引发 NPE 异常的风险,因为您将尝试对 null 变量调用方法。始终使用 ==
代替,因为您不是在测试通知引用的值,而是在测试引用本身是否为 null。
也一样
row2.last_notified == null
也关于
row2.frequency == "Daily"
这里恰恰相反,因为您错误地比较了字符串 - 请改用 equals(...)
或 equalsIgnoreCase(...)
方法。了解 ==
检查两个 对象引用 是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否相同字符顺序相同,这就是这里的重点。
改为:
row2.frequency.equals("Daily")
我有这个代码。它是 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 应该 return 为真?我错过了什么?
关于
row2.last_notified.equals(null)
不要使用 equals
方法测试 null,因为这有引发 NPE 异常的风险,因为您将尝试对 null 变量调用方法。始终使用 ==
代替,因为您不是在测试通知引用的值,而是在测试引用本身是否为 null。
也一样
row2.last_notified == null
也关于
row2.frequency == "Daily"
这里恰恰相反,因为您错误地比较了字符串 - 请改用 equals(...)
或 equalsIgnoreCase(...)
方法。了解 ==
检查两个 对象引用 是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否相同字符顺序相同,这就是这里的重点。
改为:
row2.frequency.equals("Daily")