Gradle Groovy 和 Kotlin kts 语法对比

Groovy 和 Kotlin kts 对比

1. 创建配置

下面是 Android 签名类型:

groovy 复制代码
android {
    productFlavors {
        // 创建 prod 名的配置
        prod {

        }
    }
}
  • 在 kts 中,prod 可能需要显示调用: create("prod")
  • 在 groovy 中,基于 元编程 和 拦截机制,对于不存在 prod 的方法,会调用 invokeMethod(),最后调用 create 完成创建。

2. 赋值 和 调用

Groovy 中 prop 123 可以是 调用函数,也可以是 属性 赋值。

kts 中要处理:

  1. prop(123)
  2. prop = 123 或 setProp(123)
org.gradle.api.provider.Property

Property<T>get() set(T) 方法,Groovy赋值运算同样可以简化为:

prop = 123

  • kts 也可以=直接赋值,因为实现了 = 运算符重载:org.gradle.api.provider.Property<T>.assign(value: T?)
属性赋值
  • Groovy 只要有 setter或getter 方法,都可认作 属性,并且 set 可以有多个 类型。
  • 而 Kotlin setter/getter 类型一致时,才 作为属性。

以下对比下区别:

gradle 复制代码
repositories {
    maven { url 'https://jitpack.io' }
}

// get/setUrl 是 URI 类型, kts 则要写成
repositories {
    maven { setUrl("https://jitpack.io") }
    // 或
    maven { url = uri("https://jitpack.io") }
}

3. 方法调用 和 命名参数

Groovy 方法调用可以 省去 括号。

而 Kotlin 方法调用 则是 infix 函数才能省去括号。

常见的设置 gradle插件 代码:

groovy 复制代码
// Groovy
apply plugin: 'java'
// 完整形式:apply(plugin: 'java')

// kotlin
apply(plugin = "java")

4. 强类型

tasks.create 创建任务需要明确类型:

gradle 复制代码
// Groovy 弱类型
tasks.create("copyFile") {

}

// Kotlin 强类型
tasks.create<Copy>("copyFile") {
    ....
}

字段/方法 缺省调用

动态调用,maybeCreate

  1. 缺少方法,则会 调用 invokeMethod()methodMissing() 方法
  2. 缺少字段,则会 调用 getProperty()propertyMissing() 方法

文档参考

相关推荐
bst@微胖子1 天前
CrewAI+FastAPI实现多Agent协作完成软件编码项目
android·fastapi
Android-Flutter1 天前
Compose - Scaffold使用
android·kotlin
2501_946244781 天前
Flutter & OpenHarmony OA系统图片预览组件开发指南
android·javascript·flutter
极客小云1 天前
【IEEE Transactions系列期刊全览:计算机领域核心期刊深度解析】
android·论文阅读·python
wanghowie1 天前
02.01 Spring Boot|自动配置机制深度解析
android·spring boot·后端
一起搞IT吧1 天前
三方相机问题分析十一:【手电筒回调异常】手电筒打开3档时,达到档位控制温度,手电筒二级界面中档位为0
android·图像处理·数码相机
2501_924064111 天前
2025年移动应用渗透测试流程方案及iOS安卓测试方法对比
android·ios
千里马学框架1 天前
安卓14-16车机手机仿小米su7三分屏实战项目专题
android·智能手机·framework·分屏·车载·小米汽车·三分屏
走在路上的菜鸟1 天前
Android学Flutter学习笔记 第二节 Android视角认知Flutter(resource,生命周期,layout)
android·学习·flutter
zh_xuan1 天前
kotlin的常见空检查
android·开发语言·kotlin