方法
Groovy方法与其他语言的方法类似。方法定义
方法通过返回类型或者def(无返回)来定义的,方法可以接受任意数量的参数,即使没有明确声明它们的类型,可以使用Java方法的修饰符,如果未指定可见性修饰符,默认为public。Groovy中的方法总是返回值,如果没有return语句,会返回方法中最后一条执行语句的值。def someMethod() { 'method called' }
String anotherMethod() { 'another method called' }
def thirdMethod(param1) { "$param1 passed" }
static String fourthMethod(String param1) { "$param1 passed" }
命名参数
与构造函数类似,普通方法也可以通过命名参数来调用,这些参数做为map接收,在方法体中可以像访问普通map一样获取参数值。def foo(Map args) { "${args.name}: ${args.age}" }
foo(name: 'Marie', age: 1)
默认参数
默认参数使参数可选,如果调用方法时未指定参数值就使用默认值,默认参数必须定义在最后面。def foo(String par1, Integer par2 = 1) { [name: par1, age: par2] }
assert foo('Marie').age == 1
变长参数
Groovy支持具有可变数量参数的方法,在变长参数之前,可以定义正常的参数。变长参数还可以使用数组代替变长参数,任何带有数组作为最后参数的方法都被Groovy看作是一种可以接受变长参数的方法。如果传入null做为变长参数,那么参数就是null。此外要注意的是,如果具有变长参数的方法具有重载的方法,在这种情况下,调用方法时,会选择最明确的方法。
//两者等效
def foo(Object... args) { args.length }
assert foo() == 0
assert foo(1) == 1
assert foo(1, 2) == 2
def foo(Object[] args) { args.length }
assert foo() == 0
assert foo(1) == 1
assert foo(1, 2) == 2
//传入null
assert foo(null) == null
//传入数组
def foo(Object... args) { args }
Integer[] ints = [1, 2]
assert foo(ints) == [1, 2]
//方法重载
def foo(Object... args) { 1 }
def foo(Object x) { 2 }
assert foo() == 1
assert foo(1) == 2
assert foo(1, 2) == 1