变量:基本语法
How do I create and access the global variables in Groovy? – Stack Overflow
monkeypatching – Dynamically add a property or method to an object in groovy – Stack Overflow
def var3 = 'var3'
为类添加新的属性(元编程):
g.metaClass.bye = { println "Goodbye, $name" }
g.bye()
// 注意,通过元编程注入的属性是没有 Get Set 方法的;
代码执行:
#!/bin/sh
# 执行脚本:#
groovy groovy-quick-start/function.groovy
# 打印日志。并同时指定日志等级和依赖解析信息
groovy -Divy.message.logger.level=4 -Dgroovy.grape.report.downloads=true \
groovy-quick-start/function.groovy
=
判断变量是否为空(grails – Checking if a collection is null or empty in Groovy – Stack Overflow):
if (members) {
//Some work
}
函数定义:
定义函数
def hello-groovy() {
println "Hello Groovy!"
}
在脚本中,引用全局变量:
// 方法一、使用 @Field 注解
import groovy.transform.Field
@Field def foo = 1234
// 方法二、不使用 def 关键字
gVar = 456
def printGlobalVar() {
println foo
println gVar
}
函数及返回值
修饰符:方法的默认访问「修饰符」是 public
返回类型:方法的「返回类型」可以不需要声明,但需添加 def 关键字;
参数类型:方法的「参数类型」可以被省略,默认为 Object 类型;
返回值:在有返回值的方法中 return 可以被省略,默认返回最后一行代码的运行结果,如果使用了 return 关键字则返回指定的返回值;
隐式的 Getter\Setter 方法
Groovy 默认会隐式的创建 getter、setter 方法,并且会提供带参的构造器;
多重方法
在 Groovy 中,调用的方法将在运行时被选择。这种机制被称为运行时分派或多重方法(multi-methods),是根据运行时实参(argument)的类型来选择方法。Java 采用的是相反的策略:编译时根据声明的类型来选择方法;
下面是一个例子,同样的 Java 代码在 Java 和 Groovy 环境中运行结果是不同的:
int method(String arg) {
return 1;
}
int method(Object arg) {
return 2;
}
Object o = "Object";
int result = method(o);
// In Java
assertEquals(2, result);
// In Groovy
assertEquals(1, result);
产生差异的原因在于,Java 使用静态数据类型,o 被声明为 Object 对象,而 Groovy 会在运行时实际调用方法时进行选择。因为调用的是 String 类型的对象,所以自然调用 String 版本的方法;