2015-01-21 99 views
1

是否有可能具有重載方法,每個接受功能和沒有別的,例如重載方法科特林接收高階函數

fun foo(a:() -> A) { } 
fun foo(b:() -> B) { } 

在Scala中這是不可能的,因爲這些功能desugar到的Function0實例,並且由於擦除這些方法不能被消除。 Kotlin的情況是否如此,如果有的話,是否有解決方法?

回答

1

您可以解決在科特林簽名衝突使用[platformName]註釋:

import kotlin.platform.* 

class A 
class B 

[platformName("foo1")] 
fun foo(a:() -> A) { } 
fun foo(b:() -> B) { } 

請參閱該文檔here

+0

安德烈,但仍科特林僅基於返回值不能選擇合適的過載。至少不是沒有在函數文字中明確指定類型。或者可以嗎? – 2015-01-21 10:54:36

+0

@ ilya-ryzhenkov,不,如果你使用lambda表達式不行,但如果你傳遞了已經鍵入的值,它可以 – 2015-01-21 15:26:40

+0

'platformName'在後來Kotlin被重命名爲'JvmName' – 2015-12-31 10:35:33