2017-06-10 39 views
1

比方说,我们有以下的扩展功能:从Kotlin的另一个类访问静态扩展函数?

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

}

你怎么能在Helper类访问plus扩展功能在另一个类。有没有一种方法,我们可以例如做这样的事情:

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

}

回答

1

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


作为一个额外的提示,你可以,如果你想与+符号使用它标志着这个功能的operator

operator fun Int.plus(value: String) = Integer.valueOf(value) + this 

val x = 2 + "25" 
+0

感谢您花时间回答这个问题 – user2491598

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.:

这可以以多种方式来实现将扩展函数放入伴随对象中是非常不规则的,而不是习惯用法。我很难想象为什么你会需要这个。

+0

非常感谢您的回答:) – user2491598