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

文档参考

相关推荐
Lesile9 小时前
Android:Hilt框架入门 · 在ViewUI和ComposeUI下的应用
android·android jetpack
用户423816229079 小时前
Android 16 WebView 页面顶部挖孔/通知栏不能显示UI问题排查
android
weixin_7275356210 小时前
Loop 已死,Graph 新生:AI 工作流的范式革命
android·人工智能·rxjava
严同学正在努力11 小时前
从备份到恢复:我用 30 分钟恢复了误删的核心业务表
android·java·数据库·ai
a11177611 小时前
中文优先的企业 RAG 知识库 开源项目
开发语言·开源·kotlin
梦想三三11 小时前
LangChain Output Parser 实战:从字符串到结构化数据的完整指南
android·服务器·langchain·github·uv
爱笑鱼13 小时前
Binder(八):远端进程死了,BinderProxy 为什么还能收到通知?
android
Android-Flutter14 小时前
Kotlin 冷流与热流详解
android·kotlin
zhangphil14 小时前
Android ContentProvider/ContentResolver读图片,跨进程 IPC慢
android
yueqc114 小时前
Android .so 文件压缩
android·so·包体积