Является ли Kotlin Companion Object просто способом добавления функций из интерфейса?

Я читаю книгу 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")
    };
}

1 ответ

Моя ментальная модель для объекта-компаньона - поддержка безопасных синглетонов на уровне языка. т.е. вместо статических методов в классе для методов Factory или Util, вы можете предоставить эти связанные методы в сопутствующем объекте Singleton.

Статус Companion дает вам множество побед по умолчанию, которые похожи на класс java со статическими методами.

Ваш пример кажется неверным, потому что почему Fruit "singleton" Apple?

Другие вопросы по тегам