以下代码行位于我的一个if
语句中:
$("#dateOfTransaction_month").val() != "${loadInstance?.payment?.dateOfTransaction?.getAt(Calendar.MONTH) + 1}"
由于Java的日期/时间管理如此混乱,我必须编写+ 1
才能获得正确的月份。问题是有时候payment
对象可能不存在,所以我基本上会说null + 1
。这给了我错误Cannot invoke method plus() on null object
。有没有任何简洁的方法(整洁的像Groovy的safe navigation operator)我可以解释payment
语句中if
对象为空的可能性,或者我被迫检查看看如果if
语句之前的值为空?
答案 0 :(得分:7)
Groovy向Date添加了一个plus()方法,这是+运算符调用的方法。您可以自己直接调用它并将安全导航操作符链接到它。
$("#dateOfTransaction_month").val() != "${loadInstance?.payment?.dateOfTransaction?.getAt(Calendar.MONTH)?.plus(1)}"
http://groovy.codehaus.org/groovy-jdk/java/util/Date.html#plus(int)
答案 1 :(得分:1)
在同一页面上,您实际上就是Elvis运算符(某些可能是空值?:默认值)。 使用Elvis,您可以指定要使用的默认值。
e.g。
$("#dateOfTransaction_month").val() != "${(loadInstance?.payment?.dateOfTransaction?.getAt(Calendar.MONTH) ?: 0) + 1}"
然后默认为1月
答案 2 :(得分:0)
要解决使用恼人的Java Date和Calendar API的问题,您可以查看JodaTime。与内置API相比,这是一个梦想。
答案 3 :(得分:-1)
当我玩它的时候,这是我非常喜欢Groovy的一件事,?自动测试空引用的运算符。
在Java中没有这样的东西,你只需测试你正在遍历的任何对象层次结构来检查空值:
if (object1 != null && obecjt1.obecjt2 != null && object1.object2.object3 != null)
do_something_awesome_with(object1.object2.object3);
然而,你的例子总是会引起麻烦,因为Groovy的?运算符只是在遇到空引用时停止遍历并返回null。