我想说我想要一个提供square
方法的整数。
科特林:
fun Int.square() = this * this
用法:
println("${20.square()}")
DOC:
扩展实际上并不修改它们扩展的类。通过定义扩展,您不会将新成员插入到类中,而只是使用这种类型的变量上的点符号来调用新函数。
我们想强调扩展函数是静态调度的
我的期望是他们只是在编译期间将它添加到扩展类的成员函数中,但这是他们明确拒绝的,所以我的下一个想法是它可能是"有点&# 34;像scala implicits。
Scala的:
object IntExtensions{
implicit Class SquareableInt(i:Int){
def square = i*i
}
}
用法:
import IntExtensions._
然后
println(f"${20.square}")
DOC:
隐式类被置于类和隐式方法配对中,其中implciit方法模仿类的构造函数。
生成的隐式方法与隐式类具有相同的名称。
但是scala暗示会创建一个新类,这会禁用this
的使用。
那么...... Kotlin如何扩展课程? "可赎回"并没有告诉我多少。
答案 0 :(得分:4)
在你的情况下,Kotlin只需创建名为“filename”Kt 的简单utils-class和静态方法“ int square(int x)”(java伪代码)
从Java看起来像这样
// filename int-utils.kt
final class IntUtilsKt {
public static int square(int x) {
return x * x;
}
}
此后所有人都打电话给
val result = 20.square()
将被转换(在字节码级别)到
val result = IntUtilsKt.square(20);
P.S。 您可以使用IDEA操作“显示Kotlin字节码”
自行查看