Gradle是目前最流行的Java构建工具,基于Groovy开发,因此使用Gradle前必须对groovy有一定的了解。记录groovy使用中的一些重要概念, 后续继续补充。
详细文档参考http://www.groovy-lang.org/single-page-documentation.html,至少看完Groovy Language Specification这部分。 这是一份官方的权威文档,案例与解析的方式并用,可以快速掌握Groovy基本语法和使用方法。需要的只是Java基础、克服中文文档的依赖(可以配合强大的翻译插件,软件...)和阅读文档的耐心。
闭包(Closure)
Groovy中的闭包是一个公开、匿名的代码块,可以接收参数,将返回值赋值给变量。闭包可以引用在其周围范围内声明的变量。查看1.5. Closures以确保能理解和使用闭包.
代理/委托策略(Delegation strategy)
Groovy定义作为Closure实例的闭包(closure)与Java 8中的 lambda 表达式有很大的不同. 代理是一个 lambda 中没有等价物的一个关键概念. 可修改闭包的代理和代理策略使得在Groovy中设计优美的DSL成为可能.
Owner, delegate和this
为了理解代理的概念, 我们必须先解释闭包中的this
. 一个闭包定义了3个不同的事物:
-
this
对应于定义闭包的包裹类(enclosing class) -
owner
对应于定义闭包的包裹对象(enclosing object), 可能是类或闭包 -
delegate
对应于当接收着没有定义可供调用方法或解析属性时的第三方对象
请参看http://docs.groovy-lang.org/latest/html/documentation/#closure-owner中的代码示例
补充:
this
和owner
: 大部分情况下是同一个对象, 定义在闭包中的闭包其owner
为外层闭包对象, 而此时this
指外层闭包所在的类对象.
owner
和delegate
: 默认情况下闭包的delegate
就是owner
, 但可以通过Closure.delegate
来修改默认行为
代理策略
闭包中定义了若干代理策略供选择
-
Closure.OWNER_FIRST
是默认策略. 若 owner中存在属性和方法则调用owner的, 否则使用 delegate . -
Closure.DELEGATE_FIRST
反之: delegate 优先, 其次 owner -
Closure.OWNER_ONLY
will 只解析 owner的属性和方法, 忽略delegate. -
Closure.DELEGATE_ONLY
只解析delegate的属性和方法, 忽略owner. -
Closure.TO_SELF
可以由需要高级元编程技术并希望实现自定义解析策略的开发人员使用:解决方案只能在包裹类自身进行, 而不会作用在owner或delegate 上。实现自定义Closure
的唯一选择。
Differences with Java
Operator overloading
所有支持重载的操作符及对应方法见: http://docs.groovy-lang.org/latest/html/documentation/#Operator-Overloading
Traits
http://docs.groovy-lang.org/latest/html/documentation/#_traits
网友评论