例如 MyObject mo-> 其实相当于 MyObject mo = new MyObject(params);
即传递一个 实例mo
例如 在controller 中validate,调用commond,将params传入commond类中
classMemberController{
defsearch={SearchCommandcmd->
if(cmd.hasErrors()){
redirect(action:'error')
}else{
//dosomethingelse
}}}
----------------------------------
classSearchCommand{
Stringteamname
Stringusername
Stringgender
staticconstraints={
gender(inList:["F","M"])
}}
?.
用于判断非空,如 man 类, 包含 man.name, man.age。
在JAVA内一般情况下需要判断
if(man!=null){
if (man.name!=null){
System.out.println(man.name);
}
}
而在 groovy中 ,直接简化 成
print man?.name
如果 man为空,返回null
groovy中还可以链式man?.name?.age
例如 页面中
如果member不为空,返回member.phone,否则返回空字符串,同样道理,如果member.phone不为空,返回member.phone.encodeAsHTML()
另外 ?还有另个用途,就是JAVA的三元
man.name==null?"":man.name
可直接写成
man.name?:""
即:前的不为空为本身的部分可省。
“*.”操作符。def list = ['abc','yyyy','1234467']def sizes =list*.size()sizes.each{printlnit}打印的结果为:347通过上面的例子,我们可以知道,“*.”操作符的操作对象是一个List对象,如上面的list对象;然后它的结果也是一个List对象;最后还有一个size()方法,是在取元素的长度。通过结果,我们知道,我们的“*.”操作符首先对list对象的每一个元素进行size()运算,然后把运算得到的每一个结果作为元素组成一个新的list对象sizes。可以知道,上面的“*.”操作符的运算相当于下面的代码:def list = ['abc','yyyy','1234467']def sizes =list.collect{it.size()}sizes.each{printlnit}同样的结果,但上面的代码比起“*.”操作符就麻烦多了。知道了“*.”操作符的作用,我们就可以对它进行更多的应用。假设我们有如下的一个GroovyBean:classEmpl{String nameint age}我们现在有一个Empl对象为元素的List对象:def list = [new Empl(name:'Tom',age:12),new Empl(name:'Alice',age:15),new Empl(name:'Rose',age:20)]现在,我们要取得每一个元素的age,组成一个新的List对象:def sizes = list*.age下面我们来测试:sizes.each{printlnit}结果为:121520