「Groovy」- 快速开始及简单教程

变量:基本语法

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 语言快速入门