1
是否有可能具有重載方法,每個接受功能和沒有別的,例如重載方法科特林接收高階函數
fun foo(a:() -> A) { }
fun foo(b:() -> B) { }
在Scala中這是不可能的,因爲這些功能desugar到的Function0
實例,並且由於擦除這些方法不能被消除。 Kotlin的情況是否如此,如果有的話,是否有解決方法?
是否有可能具有重載方法,每個接受功能和沒有別的,例如重載方法科特林接收高階函數
fun foo(a:() -> A) { }
fun foo(b:() -> B) { }
在Scala中這是不可能的,因爲這些功能desugar到的Function0
實例,並且由於擦除這些方法不能被消除。 Kotlin的情況是否如此,如果有的話,是否有解決方法?
您可以解決在科特林簽名衝突使用[platformName]
註釋:
import kotlin.platform.*
class A
class B
[platformName("foo1")]
fun foo(a:() -> A) { }
fun foo(b:() -> B) { }
請參閱該文檔here
安德烈,但仍科特林僅基於返回值不能選擇合適的過載。至少不是沒有在函數文字中明確指定類型。或者可以嗎? – 2015-01-21 10:54:36
@ ilya-ryzhenkov,不,如果你使用lambda表達式不行,但如果你傳遞了已經鍵入的值,它可以 – 2015-01-21 15:26:40
'platformName'在後來Kotlin被重命名爲'JvmName' – 2015-12-31 10:35:33