Mic*_*son 17 kotlin kotlin-companion
随播对象的文档具有以下示例
class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}
Run Code Online (Sandbox Code Playgroud)
这Factory是伴随对象的名称.然后继续说:
可以省略伴随对象的名称,在这种情况下
Companion将使用名称:
但是,我没有看到使用伴随对象名称的示例.
因为每个类只能有一个伴侣对象(否则你会收到Only one companion object is allowed per class错误),这个名字对我来说就像是一些非常无用的语法糖.
同伴对象的名称实际上可以用于什么?为什么有人会为此使用任何名称呢?
您可以使用随播广告的名称:
MyClass.create() // not via companion name
MyClass.Companion.create() // via default companion name
MyClass.Factory.create() // via companion name
Run Code Online (Sandbox Code Playgroud)
这个名字对于Kotlin来说可能并不重要,因为你可以在不知道有伴随对象的情况下访问该方法(上面的第一行).如果你想更明确地访问这些功能,它更像是一种个人风格.
但是对于java interop,它会有所不同,因为你必须通过配套名称访问该函数:
MyClass.Factory.create(); // with named companion
MyClass.Companion.create(); // with unnamed comanion
Run Code Online (Sandbox Code Playgroud)
那么,Kotlin 中的伴生对象不仅仅是语法糖。他们其实是一个类型。它们能够做更多的事情,并且不必被视为只是静态的替代品。
您实际上可以扩展类或实现接口。请参阅下面的示例。
open class Super {
open fun sayHello() {
println("Hello")
}
}
class Some {
companion object Child : Super() {
override fun sayHello() {
super.sayHello()
println("Hello from companion object")
}
}
}
fun main() {
Some.Child.sayHello()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |