从Kotlin的另一个类访问静态扩展函数?

假设我们有以下扩展function:

class Helper { companion object { fun Int.plus(value: String) = Integer.valueOf(value).plus(this) } 

}

如何从另一个类的Helper类访问plus扩展function。 有没有一种方法可以让我们做这样的事情:

 class OtherClass { fun someMethod() { val eight = 7.Helper.Companion.plus("1") } 

}

在你的例子中, Int.plus(value: String)Helper.Companion对象的一个​​成员函数(它是一个伴侣对象,或者它在另一个类中并不重要)。 这种情况在文档的声明扩展为成员部分中有描述。

简而言之,要使用两个接收器(一个Inttypes的扩展接收器和一个Helper.Companiontypes的调度接收器)来访问一个函数,你必须在范围内使用它们。

这可以通过多种方式来实现:

 with(Helper.Companion) { 239.plus("") } 

要么

 with(Helper.Companion) { with(239) { plus("") } } 

PS把扩展function放到伴侣对象中是非常不规则的,不是惯用的。 我很难想象为什么你会需要这个。

像这样声明的扩展是一个member extension function ,只会在Helper类中可见。 如果您需要在该课程之外访问,请将其放在更广的范围内,例如将其设置为顶级function。 或者,如果要将其保留在一个类中,则可以使其成为一个带有两个参数的常规函数​​。


作为一个附加的提示,如果你想用+符号来使用它,你可以将这个函数标记为一个operator符:

 operator fun Int.plus(value: String) = Integer.valueOf(value) + this val x = 2 + "25"