2017-07-27 42 views
2

我知道我的第一個第二個示例使用帶有單個參數的lambda函數。我試圖理解爲什麼它會與我的第二個樣板示例不同,後者是雙冒號被用來代替拉姆達。 (仍然是一個科特林福利局試圖總結我的周圍,從一個Python背景的雙冒號頭)Kotlin:雙冒號與Lambda類似

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代表什麼呢?

回答

3

假設有一個類Issuer,::Issuera function reference它的構造函數。採用適當數量的參數(本例中爲一個)的構造函數將被解析並使用,這相當於lambda { Issuer(it) }

如果沒有這樣的類,則會使用名爲Issuer的函數並使用一個參數(如果存在)。

參見:Are there constructor references in Kotlin?

+0

這是一個非常簡單明瞭的解釋。謝謝! – mleafer