-
基本方法参数定义
// Groovy中支持动态类型,即定义变量的时候可以不指定其类型。Groovy中,变量定义可以使用关键字def。注意, def不是必须的 def variable1 = 1 //可以不使用分号结尾 def varable2 = "I ama person" def int x = 1 //变量定义时,也可以直接指定类型 //变量定义:List变量由[]定义,比如 def aList = [5,'string',true] //List由[]定义,其元素可以是任何对象 //变量定义:Map变量由[:]定义,比如 def aMap = ['key1':'value1','key2':true] //Range类型的变量 由begin值+两个点+end值表示,下面这个aRange包含1,2,3,4,5这5个值 def aRange = 1..5 //如果不想包含最后一个元素,则 def aRangeWithoutEnd = 1..<5 <==包含1,2,3,4这4个元素
-
字符串
-
单引号''中的内容严格对应Java中的String,不对$符号进行转义
def singleQuote='I am $ dolloar' //输出就是I am $ dolloar
双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,则它会$表达式先求值。
三个引号'''xxx'''中的字符串支持随意换行
-
-
函数
//函数定义时,参数的类型也可以不指定。比如 String testFunction(arg1,arg2){//无需指定参数类型 ... } //无类型的函数定义,必须使用def关键字 def nonReturnTypeFunc(){ last_line //最后一行代码的执行结果就是本函数的返回值 } //如果指定了函数返回类型,则可不必加def关键字来定义函数 String getString(){ return"I am a string" } // 定义方法时, 可以指定默认参数 def foo(String p1, int p2 = 1) { // 指定默认p2=1 println(p1) println(p2) } foo("hello") //
-
闭包 Closure
一段单独的代码块;//闭包是一段代码,所以需要用花括号括起来.. def aClosure = { String param1, int param2 -> //这个箭头很关键。箭头前面是参数定义,箭头后面是代码 println"this is code" //这是代码,最后一句是返回值, //也可以使用return,和Groovy中普通函数一样 } // 闭包执行, 闭包对象.call(参数) 或者 闭包对象(参数) aClosure.call("this is string",100) aClosure("this is string", 100) //如果闭包没定义参数的话,则隐含有一个参数,这个参数名字叫it,和this的作用类似。it代表闭包的参数。 def greeting = { "Hello, $it!" } // 等同于: def greeting = { it -> "Hello, $it!"}
- closure作为参数传递
- 只接收一个参数,且参数是closure的方法: myMethod(myClosure)
- 如果方法只接收一个参数,括号可以省略: myMethod myClosure
- 可以使用内联的closure: myMethod {println ‘Hello World’}
- 接收两个参数的方法: myMethod(arg1, myClosure)
- 和4类似,单数closure是内联的: myMethod(arg1, { println ‘Hello World’ })
- 如果最后一个参数是closure,它可以从小括号从拿出来: myMethod(arg1) { println ‘Hello World’ }
-
对象
// 对象初始化, 可以通过map的方式, 传递初始化的值 // 变量自带getter和setter方法,当变量声明为 final 的时候,默认就没有 setter; 下面类中的name和age方法自带getter和setter class People{ String name int age } People p1 = new People(); People p2 = new People(name:"Luis",age: 29)//通过类似 map 的方式赋值参数
每行代码可以省略分号
Groovy中函数调用的时候, 如果方法只接收一个参数,括号可以省略