Синтаксис Kotlin: разница между использованием имени класса вместо имени объекта-компаньона - PullRequest
0 голосов
/ 06 ноября 2018

Глядя на этот код, который имитирует, как функции установлены в Ktor приложениях.

fun main(args: Array<String>) {
    val app = App()
    app.installFeature(Authentication)
}

interface AppFeature {
    fun install()
}

class Authentication {

    companion object Feature : AppFeature {
        override fun install() = println("Authentication Installed")
    }
}

class App {

    fun installFeature(appFeature: AppFeature) {
        println("Installing appFeature `${appFeature::class.simpleName}`")
        appFeature.install()
    }
}

Что не имеет смысла для меня в приведенном выше фрагменте, так это строка app.installFeature(Authentication)

Может кто-нибудь объяснить мне, почему использование имени class вместо имени companion object работает так же, как более очевидный способ app.installFeature(Authentication.Feature)

1 Ответ

0 голосов
/ 06 ноября 2018

Как указано в документации :

Члены объекта-компаньона можно вызывать, просто используя имя класса в качестве квалификатора

И, аналогично, вы можете использовать Authentication как AppFeature напрямую.

...