美文网首页
Gradle系列1--Groovy

Gradle系列1--Groovy

作者: cntlb | 来源:发表于2018-11-20 17:04 被阅读0次

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中的代码示例

补充:

thisowner: 大部分情况下是同一个对象, 定义在闭包中的闭包其owner为外层闭包对象, 而此时this指外层闭包所在的类对象.

ownerdelegate: 默认情况下闭包的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 可以由需要高级元编程技术并希望实现自定义解析策略的开发人员使用:解决方案只能在包裹类自身进行, 而不会作用在ownerdelegate 上。实现自定义Closure的唯一选择。

Differences with Java

参看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

相关文章

网友评论

      本文标题:Gradle系列1--Groovy

      本文链接:https://www.haomeiwen.com/subject/ewuxqqtx.html