bingmous

欢迎交流,不吝赐教~

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

Groovy in Gradle

使用Gradle需要了解的Groovy语法:

基础

  • 语句末尾不需要写分号
  • 支持使用def定义动态数据类型变量
  • 没有基本类型,全部使用包装类型
  • 方法变化
    • 使用def定义方法,可以不指定返回类型、参数类型,直接返回最后一行
    • 方法调用可以不写(),不过建议加上
    • 不管有没有返回值,Groovy中返回的都是Object类型
  • 字符串:支持单引号、双引号、三引号,双引号的可以解析插值,三引号可以带格式输出
  • 不用写getter/setter,会自动创建,调用时a.xxxa.setXxx(xx)
  • Class类型可以省略.class
  • ==就是表示equalsx.is(x)判断是不是同一个引用
  • 支持**运算符,表示多少次方
  • switch变化:
def num = 5.21
switch (num) {
case [5.21, 4, "list"]:
return "ok"
break
default:
break
}
  • Groovy 支持三种集合类型:

List --> 链表,对应 Java 中的 List 接口,一般用 ArrayList 作为真正的实现类
Map --> 哈希表,对应 Java 中的 LinkedHashMap
Range --> 范围,它其实是 List 的一种拓展

// --> list
def data = [666,123,"AA"]
data[0] = "BB"
data[100] = 33
println("size --> " + data.size()) // 101个元素
----------------------我是分割线------------------------
// --> map
def key = "888"
def data = ["key1": "value", "key2": 111, (key): 888] // 使用 () key 使用动态值
data.key1
data.["key1"]
data.key2 = "new"
def name2 = "name"
def age2 = 578
data.put(name2, age2)
println("size --> " + data.size()) // 4
println("map --> " + data) // [key1:value, key2:new, 888:888, name:578]
println("key--> " + data.get(key)) // key--> 888
----------------------我是分割线------------------------
// --> range
def data = 1..10
data.getFrom()
data.to()
println("size --> " + data.size())
println("range --> " + data) // range --> 1..10

闭包

Groovy中的闭包是一个开放,匿名的代码块,可以接受参数,返回值并分配给变量

// 标准写法,method1 就是一个闭包 (>▽<)
def method1 = { name,age ->
name + age
}
// 调用方式
method1.call(123,888)
method1(123,888)
// 默认有一个 it 表示单个参数
def method3 = { "Hello World!$it" }
// 强制不带参数
def method2 = { ->
name + age
}
// 作为方法参数使用
def to(x, y,Closure closure) {
x + y + closure(111)
}

闭包委托

闭包代码需要转换为.class代码执行,因此需要传递的参数就会赋值给delegate属性:

class Person {
String name
int age
}
def cc = {
name = "hanmeimei"
age = 26
}
Person person = new Person()
cc.call(person)

其中,cc是闭包,cc.call(person)是调用闭包,换个写法:

cc.delegate = person
cc.call()

可以直接使用的对象

println(rootProject.projectDir.path/absolutePath)
println(rootProject.rootDir.path)
println(rootProject.buildDir.path)
def file = project.file(fileName) //在当前项目下生成文件

其他groovy api

https://groovy-lang.org/groovy-dev-kit.html

posted on   Bingmous  阅读(7)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示