【问题标题】:Is a Kotlin Companion Object just a way to add functions from an interface?Kotlin Companion Object 只是从界面添加功能的一种方式吗?
【发布时间】:2018-09-23 11:03:22
【问题描述】:

我正在阅读 Kotlin in Action 这本书并试图更好地理解伴随对象,除了从接口/抽象类添加方法实现之外,伴随对象还有其他用途吗?

我遇到了一种实例化对象的方法,该方法仅在类是抽象类时才有效:

fun main(args: Array<String>) {
    Fruit.showColor()
}

class Fruit(val name: String) {
    companion object : Apple()
}

abstract class Apple {
    fun showColor(){
        print("I am an apple")
    };
}

【问题讨论】:

  • 不,如果类不是抽象的,您的示例就可以正常工作。它需要打开(并且抽象类会自动打开),但这与伴随对象无关。
  • 好点,是的,让课程开放也可以,但为什么不定期关闭课程呢? :)
  • 因为你正在扩展它。这就是开放类的意思:你可以扩展它。
  • 我了解开放类的含义,并且我们可以在伴随对象中添加多个接口,但仍然没有找到此功能的更广泛用途...

标签: kotlin kotlin-companion


【解决方案1】:

我对伴侣对象的心智模型是对安全单例的语言级别支持。即,您可以在 Singleton 伴随对象上提供这些相关方法,而不是为类提供 Factory 或 Util 方法的静态方法。

Companion 状态为您提供了许多类似于具有静态方法的 java 类的默认作用域。

您的示例似乎无效,因为为什么水果“单例”是苹果?

【讨论】:

  • 是的,但是这里我们可以实现多个接口作为伴生对象,除了做一个signleton之外肯定有一些原因
  • 不,没有理由删除非同伴objects 已经拥有的此功能。
猜你喜欢
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多