1、Groovy基础语法
1.1、基本数据类型
- Groovy支持数据类型:byte, short, int, long, float, double, char
(1)创建一个Android Studio项目
(2)在根目录新建一个 leon.gradle,输入以下内容
leon.gradle
/** 类型定义 **/
//byte 类型
byte b1 = 0
byte b2 = 1//整型
int a = 10
def b = 20//字符串
String str1 = "Hello"
def str2 = str1 + " World"//列表
def array = [1,2,3,4]
array.add(5)//映射表
def map = ["name":"冯宝宝", "sex":"woman"]/** 输出 **/
//byte 类型
println("b1 = $b1")
println("b2 = $b2")
//整型
println("a = $a")
println("b = $b")
//字符串
println("str2 = ${str2.toUpperCase()}")
//列表
println("array is $array")
array.each {println("item is $it")
}
//映射表
println("map is $map")
println("name is ${map["name"]}")
(3)在 setting.gradle中引入test.gradle
(4)打开命令行
检查gradle版本
gradle -v
检查java版本
java -version
保证,gradle与java的版本匹配
执行build.gradle
./gradlew clean -q
输出结果
1.2、方法
方法定义
//不带返回值方法
def score = ["琦玉":61,"杰诺斯":99, "King":100, "索尼克":59]
def evaluate(Map<String, Integer> map){for (String name: map.keySet()){if (map[name] >= 60){println("$name: 及格")}else{println("$name: 不及格")}}
}
evaluate(score)//带返回值方法
def add(int a, int b){return a+b;
}
def result = add(10, 23)
println("10 + 23 = $result")
执行结果
2、Groovy进阶语法
2.1、 DSL(Domain Specific Language)领域专用语言,只能用于构建配置,不能用于其他工作
2.2、闭包
- 开放匿名代码块,可接收参数,有返回值,也可被分配给变量
- 规则:{ [params ->] statements }
//闭包{println("这是闭包A")}//闭包赋值给变量
def c = {println("这是闭包B")
}
c()//闭包接收参数(1个参数,it可省略)def c2 = { it->println("闭包接收参数 it: $it")}c2("2024-06-25")//闭包接收参数(3个参数)def c3 = { name, age, sex->println("姓名:$name")println("年龄:$age")println("性别:$sex")}c3("地狱吹雪", 18, "女")
输出结果
2.3、类
//自定义DSL :identity
def identity = {id "120223827318"baseInfo {name "战栗的龙卷"age 26sex "女"}
}//BaseInfo 类
class BaseInfo {private String nameprivate int ageprivate String sexdef name(String name) {this.name = name}def age(int age) {this.age = age}def sex(sex) {this.sex = sex}@OverrideString toString() {return "BaseInfo { name: $name, age: $age, sex: $sex }"}
}// Identity 类
class Identity {private String idprivate BaseInfo baseInfo//默认构造方法Identity() {baseInfo = new BaseInfo()}def id(id) {this.id = id}//入参是一个闭包def baseInfo(Closure closure) {//将闭包与类关联起来closure.setDelegate(baseInfo)closure.call()}@OverrideString toString() {return "Identity{ id: $id, baseInfo: ${baseInfo.toString()} }"}
}//DSL与类关联
Identity i = new Identity()
identity.delegate = i
identity.call()println("identity = ${i.toString()}")
println("姓名:${i.baseInfo.name}")
输出结果