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() 方法

文档参考

相关推荐
BU摆烂会噶1 分钟前
【LangGraph】House_Agent 实战(四):预定流程 —— 中断与人工干预
android·人工智能·python·langchain
AI玫瑰助手1 分钟前
Python运算符:比较运算符(等于不等等于大于小于)与返回值
android·开发语言·python
new_dev31 分钟前
Python实现Android自动化打包工具:加固、签名、多渠道一键完成
android·python·自动化
小孔龙32 分钟前
Android `<activity-alias>` 指南:动态图标 · 多入口 · 重命名兼容
android·程序员·掘金·日新计划
QING6181 小时前
Kotlin inline 实战详解 —— 新手须知
android·kotlin·android jetpack
ElevenS_it1881 小时前
MySQL慢查询监控与告警实战:从slow_log采集到分钟级定位慢SQL的完整链路配置
android·sql·mysql
沐言人生1 小时前
ReactNative 源码分析12——Native View创建流程onBatchComplete
android·react native
caicai_xiaobai1 小时前
QT搭建安卓开发环境
android
YF02111 小时前
Android 异形屏与横屏全屏沉浸式适配技术方案
android·app
Ehtan_Zheng1 小时前
Kotlin Flow:combine()、merge() 和 zip() 的区别 —— 不要再互相替代使用
kotlin