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