Kotlin:Double Colon与Lambda在类似的类别中

时间:2017-07-27 18:16:52

标签: kotlin

我理解我的第一个第二个例子使用了传入单个参数的lambda函数。我试图理解为什么它与我的第二个样板示例不同,后者使用双冒号而不是lambda。 (仍然是一个kotlin newb试图用来自python背景的双冒号包围)

class Service(services: PluginServiceHub) {
    init {
        services.registerFlowInitiator(Landlord::class.java) { Landlord(it) }
    }
}

VS

class Service(services: PluginServiceHub) {
    init {
        services.registerFlowInitiator(IssuanceRequester::class.java, ::Issuer)
    }
}

::Issuer到底代表什么?

1 个答案:

答案 0 :(得分:5)

假设有一个类Issuer::Issuer将为其a function reference构造函数。采用适当数量的参数(在本例中为一个)的构造函数将被解析并使用,这相当于lambda { Issuer(it) }

如果没有这样的类,将使用名为Issuer且使用一个参数的函数(如果存在)。

请参阅:Are there constructor references in Kotlin?