在Kotlin语言中,这个语法做什么?它是如何工作的?
class ClassName1 {
companion object {
fun ClassName2.funName()=""
}
}
在Kotlin语言中,这个语法做什么?它是如何工作的?
class ClassName1 {
companion object {
fun ClassName2.funName()=""
}
}
这里有多种因素:
object
,只需使用类名即可引用将成员扩展函数inside声明为伴随对象可能对不同的事情有用.
例如,这样的函数可以在类内使用,就好像扩展函数被声明为类成员,但在同伴之外一样.有些人喜欢将它们放在伴生对象中,以明确它们不依赖于所述类的状态(如Java静态函数):
class ClassName1 {
fun method(): String {
val something = ClassName2()
return something.funName()
}
companion object {
fun ClassName2.funName() = ""
}
}
不过,这种使用并不要求函数是公共的.
另一种使用方法是使用伴生对象作为一种作用域:
val something = ClassName2()
with(ClassName1) { // this: ClassName1.Companion
something.funName() // brought in scope by ClassName1's companion
}
或者直接从companion导入函数:
import ClassName1.Companion.funName
val something = ClassName2()
something.funName()
例如,Duration.Compaion
使用这种模式来定义数字类型的扩展(这些是扩展属性,但 idea 相同):