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