【问题标题】:Is it possible to implement the spread operator on other classes?是否可以在其他类上实现扩展运算符?
【发布时间】:2018-07-30 04:17:23
【问题描述】:

是否可以像使用+等其他运算符一样在其他类上实现扩展运算符,例如:

class Demo{
  operator fun plus(i:Int):Demo {
    ...
  }
}

【问题讨论】:

标签: kotlin


【解决方案1】:

不,你不能。扩展运算符不匹配任何函数,因此在 Kotlin 中不能重载。

查看编译器创建的字节码可以看到,vararg 被编译为一个数组。扩展运算符只是创建该数组的副本。

例如:

fun test(vararg strings: String) {
}

fun main() {
    val params = arrayOf("1", "2")
    test(*params)
}

编译为:

INVOKESTATIC java/util/Arrays.copyOf ([Ljava/lang/Object;I)[Ljava/lang/Object;
CHECKCAST [Ljava/lang/String;
INVOKESTATIC CoroutineTestKt.test ([Ljava/lang/String;)V

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    相关资源
    最近更新 更多