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

文档参考

相关推荐
Android系统攻城狮11 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
传奇开心果编程14 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
mmsx14 小时前
Android 地图数据链路:从 GDAL、KML 到多引擎适配
android·kotlin
2601_9689007714 小时前
大模型版本回归评估实战:从能力指标到额度口径的完整链路
android·数据挖掘·回归
ao-weilai17 小时前
MySQL数据库:基本查询
android·数据库·mysql
事圆则缓17 小时前
Kotlin 泛型方差实战:out、in、星投影与类型擦除
android·开发语言·kotlin
传奇开心果编程19 小时前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer
ao-weilai20 小时前
MySQL数据库:内置函数
android·数据库·mysql
SWAGGY..20 小时前
【C++进阶】:(7)红黑树的原理与 C++ 实现:结构设计、插入调整及性质验证
android·java·开发语言·c++·算法
Android打工仔20 小时前
CoroutineScheduler 设计解析(上)—— 为什么 Dispatchers.IO 会创建更多线程?
android·kotlin·源码阅读