从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
对象的一个成员函数(它是一个伴侣对象,或者它在另一个类中并不重要)。 这种情况在文档的声明扩展为成员部分中有描述。
简而言之,要使用两个接收器(一个Int
types的扩展接收器和一个Helper.Companion
types的调度接收器)来访问一个函数,你必须在范围内使用它们。
这可以通过多种方式来实现:
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"