productId = product?.productId ?: optProductId ?: request.getAttribute("productId");
因为groovy是跟java类似的,所以初看这个语句就觉得跟java的三元运算符"?:"很像,但是不知道这个语句的判 断条件是什么,后来实验了一下,发现这个语句是这样,有三个变量:
produc?.productId
optProductId
request.getAttribute("productId")
如果三者只有一个变量有值,那么前面定义的productId的值就是该变量的值,如果有多个变量有值,取最前面有值变量的值。
再来说说第一个变量中的"?"作用,其实这个符号跟ftl中的"??" 都是判断非空,这里这个非空的意思是变量不为null,如果为null程序还是会继续执行不报空指针错误。
开始我是理解为,如果不定义变量然后使用这个操作符也会起作用,后来发现是只有为null时,这个操作符才会发挥作用。
关于groovy的操作符的详细介绍可以看看这个博客:grovvy语言规范值操作符