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

文档参考

相关推荐
消失的旧时光-19433 小时前
Android ble和经典蓝牙
android
李少兄4 小时前
IntelliJ IDEA 如何全局配置 Maven?避免每次打开新项目重新配置 (适用于 2024~2025 版本)
android·maven·intellij-idea
小蜜蜂嗡嗡5 小时前
【flutter报错:Build failed due to use of deprecated Android v1 embedding.】
android·flutter·embedding
杨筱毅5 小时前
【底层机制】Android GC -- 为什么要有GC?GC的核心原理?理解GC的意义
android·jvm·gc
用户69371750013846 小时前
⚡Kotlin 五大神器完全解析:let、with、run、apply、also 一次搞懂,面试官都笑了!
android·kotlin
木易 士心6 小时前
Spring Boot + Kotlin + Gradle 构建现代化后端应用
spring·kotlin
QmDeve6 小时前
Android 使用液态玻璃(LiquidGlass)效果,真实的折射和色散效果
android·github
xhbh6667 小时前
【实战总结】MySQL日志文件位置大全:附查找脚本和权限解决方案
android·adb
Digitally7 小时前
6 种无误的方法:如何备份和恢复华为手机
android