Ima*_*ane 5 kotlin companion-object extension-function
在 Kotlin 语言中,这个语法有什么作用以及如何工作?
class ClassName1 {
companion object {
fun ClassName2.funName()=""
}
}
Run Code Online (Sandbox Code Playgroud)
这里有很多事情在起作用:
object:与类关联的特殊对象,只需使用类名即可引用在伴生对象内声明成员扩展函数可能对不同的事情有用。
例如,此类函数可以在类内使用,就好像扩展函数被声明为类成员但在伴生函数之外一样。有些人喜欢将它们放在伴生对象中,以明确它们不依赖于所述类的状态(如 Java 静态函数):
class ClassName1 {
fun method(): String {
val something = ClassName2()
return something.funName()
}
companion object {
fun ClassName2.funName() = ""
}
}
Run Code Online (Sandbox Code Playgroud)
不过,这种使用并不要求该函数是公开的。
使用它的另一种方法是将伴生对象用作某种范围:
val something = ClassName2()
with(ClassName1) { // this: ClassName1.Companion
something.funName() // brought in scope by ClassName1's companion
}
Run Code Online (Sandbox Code Playgroud)
或者直接从同伴导入函数:
import ClassName1.Companion.funName
val something = ClassName2()
something.funName()
Run Code Online (Sandbox Code Playgroud)
例如,这种模式用于Duration.Compaion定义数字类型的扩展(这些是扩展属性,但它是相同的想法):
https://github.com/JetBrains/kotlin/blob/6a670dc5f38fc73eb01d754d8f7c158ae0176ceb/libraries/stdlib/src/kotlin/time /持续时间.kt#L71
| 归档时间: |
|
| 查看次数: |
4774 次 |
| 最近记录: |