是否可以在其他类上实现散布运算符?

时间:2018-07-29 16:41:03

标签: kotlin

是否可以像使用其他+这样的运算符一样,在其他类上实现散布运算符,例如:

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

1 个答案:

答案 0 :(得分: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