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 26
sex "女"
}
}
//BaseInfo 类
class BaseInfo {
private String name
private int age
private String sex
def name(String name) {
this.name = name
}
def age(int age) {
this.age = age
}
def sex(sex) {
this.sex = sex
}
@Override
String toString() {
return "BaseInfo { name: $name, age: $age, sex: $sex }"
}
}
// Identity 类
class Identity {
private String id
private BaseInfo baseInfo
//默认构造方法
Identity() {
baseInfo = new BaseInfo()
}
def id(id) {
this.id = id
}
//入参是一个闭包
def baseInfo(Closure closure) {
//将闭包与类关联起来
closure.setDelegate(baseInfo)
closure.call()
}
@Override
String 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}")
输出结果