变量:基本语法
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 版本的方法;
参考文献
Apache Groovy Docmentation
Groovy 语言快速入门