0

查看这段代码,它模仿了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)

4

1 回答 1

3

文档中所述:

可以通过简单地使用类名作为限定符来调用伴生对象的成员

同样,您可以直接Authentication用作AppFeature

于 2018-11-06T07:27:23.727 回答