Глядя на этот код, имитирующий установку функций в 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)