《Gradle权威指南》--Groovy基础
No1:
Groovy中分号不是必须的
No2:
Groovy中,单引号和双引号都可以定义一个字符串常量,不同的是单引号标记的是纯粹的字符串常量,而不是对字符串里的表达式做运算,但是双引号可以。
task printStringClass<<{ def str1='单引号' def str2="双引号" println "单引号定义的字符串类型:"+str1.getClass().name println "双引号定义的字符串类型:"+str2.getClass().name } task printStringVar<<{ def name = "张三" println '单引号的变量计算:${name}' println "双引号的变量计算:${name}" }
结果
No3:
List
task printList<<{ def numList=[1,2,3,4,5,6] println numList.getClass().name println numList[1]//访问第二个元素 println numList[-1]//访问最后一个元素 println numList[-2]//访问倒数第二个元素 println numList[1..3]//访问第二个到第四个元素 numList.each{ println it } }
结果
No4:
Map
task printlnMap<<{ def map1=['width':1024,'height':768] println map1.getClass().name println map1['width'] println map1.height map1.each{ println "key:${it.key},Value:${it.value}" } }
结果
No5:
方法括号可省略
task invokeMethod<<{ method1(1,2) method1 1,2 } def method1(int a,int b){ println a+b }
结果
No6:
return可以不写,默认执行最后一句
task printMethodReturn<<{ def add1 = method2 1,2 def add2 = method2 5,3 println "add1:${add1},add2:${add2}" } def method2(int a,int b){ if(a>b){ a }else{ b } }
结果
No7:
代码块
代码块形成过程 //第一步 numList.each({ println it }) //第二步 numList.each(){ println it } //第三步 numList.each{ println it }
No8:
JavaBean
task helloJavaBean<<{ Person p = new Person() println "名字是:${p.name}" p.name = "张三" println "名字是:${p.name}" println "年龄是:${p.age}" } class Person{ private String name public int getAge(){ 12 } }
结果
注意:能取到age的值是因为定义了getAge()方法,但不能修改age的值,因为没有定义setter方法
No9:
闭包
task helloClosure<<{ //使用我们自定义的闭包 customEach{ println it } } def customEach(closure){ //模拟一个有10个元素的集合,开始迭代 for(int i in 1..10){ closure(i) } }
结果
当闭包有一个参数时,默认就是it
多个参数如下
task helloClosure<<{ //多个参数 eachMap{k,v-> println "${k} is ${v}" } } def eachMap(closure){ def map1 = ["name":"张三","age":18] map1.each{ closure(it.key,it.value) } }
结果
No10:
Groovy闭包有thisObject、owner、delegate三个属性
task helloDelegate<<{ new Delegate().test{ println "thisObject:${thisObject.getClass()}" println "owner:${owner.getClass()}" println "delegate:${delegate.getClass()}" method1() it.method1() } } def method1(){ println "Context this:${this.getClass()} in root" println "method1 in root" } class Delegate{ def method1(){ println "Delegate this:${this.getClass()} in Delegate" println "method1 in Delegate" } def test(Closure<Delegate> closure){ closure(this) } }
结果
注:delegate和owner是相等的。优先级:thisObject>owner>delegate?
task configClosure<<{ person{ personName="张三" personAge=20 dumpPerson() } } class Person{ String personName int personAge def dumpPerson(){ println "name is ${personName},age is ${personAge}" } } def person(Closure<Person> closure){ Person p = new Person(); closure.delegate = p //委托模式优先 closure.setResolveStrategy(Closure.DELEGATE_FIRST); closure(p) }
结果
分类:
Gradle
标签:
gradle权威指南
, Groovy基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2017-03-16 RecyclerView 和 ListView 使用对比分析
2017-03-16 apk瘦身
2016-03-16 Android超链接