代码之家  ›  专栏  ›  技术社区  ›  sksamuel

Kotlin中接收高阶函数的重载方法

  •  1
  • sksamuel  · 技术社区  · 10 年前

    是否可能有重载方法,每个方法都接受一个函数,而不接受其他任何东西,例如

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

    在Scala中,这是不可能的,因为函数会降级为 Function0 ,并且由于擦除,这些方法无法消除歧义。Kotlin的情况是否相同?如果是,是否有解决方法?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Andrey Breslav    10 年前

    您可以使用 [platformName] 注释:

    import kotlin.platform.*
    
    class A
    class B
    
    [platformName("foo1")]
    fun foo(a: () -> A) { }
    fun foo(b: () -> B) { }
    

    查看文档 here