假设我们有以下扩展功能:
class Helper {
companion object {
fun Int.plus(value: String) = Integer.valueOf(value).plus(this)
}
}
如何从另一个类的plus
类中访问Helper
扩展函数。有没有办法我们可以做这样的事情,例如:
class OtherClass {
fun someMethod() {
val eight = 7.Helper.Companion.plus("1")
}
}
答案 0 :(得分:3)
在您的示例中,Int.plus(value: String)
是Helper.Companion
对象的成员函数(事实上它是一个伴随对象,或者它在另一个类中并不重要)。此案例在文档的Declaring Extensions as Members部分中进行了描述。
简而言之,要使用两个接收器(类型为Int
的扩展接收器和类型为Helper.Companion
的调度接收器)访问一个函数,您必须同时使用它们范围。
这可以通过多种方式实现:
with(Helper.Companion) {
239.plus("")
}
或
with(Helper.Companion) {
with(239) {
plus("")
}
}
P.S。将扩展函数放入伴随对象是非常不规则的,而不是惯用的。我很难想象你为什么需要那个。
答案 1 :(得分:1)
声明为此类的扩展名为member extension function
,并且只会在Helper
类中显示。如果您需要在该类之外访问它,请将其放在更广泛的范围内,例如,使其成为顶级函数。或者,如果要将其保留在类中,可以使它成为带有两个参数的常规函数。
作为附加提示,如果您要将此功能与+
符号一起使用,则可以将此功能标记为operator
:
operator fun Int.plus(value: String) = Integer.valueOf(value) + this
val x = 2 + "25"