代码之家  ›  专栏  ›  技术社区  ›  Mangat Rai Modi

Kotlin:扩展函数与带有调度Receiver的成员函数

  •  0
  • Mangat Rai Modi  · 技术社区  · 8 年前

    科特琳有一个 A.to(that: B) 接受任意两种类型参数并返回的扩展函数 Pair<A,B> . 现在我和一个班 to 带的函数接受两个参数。

    基本上这两种不同 函数具有精确的语法,类中的函数将被扩展名1屏蔽。

    例子 :

    // following return Pair<k,v>
    fun convert(value:K, converter: org.jooq.Converter<K,V>) = converter.to(value)
    

    jooq转换器是一个非常流行的类,可以在数据库兼容类和自定义类之间进行转换。

    根据Kotlin的 documentation ,扩展函数优先于类方法,这对于Kotlin包提供的扩展方法来说没有意义,因为它们的作用域是全局的。有 qualified-this 解决超出扩展函数的问题,但在这里似乎没有帮助

    编辑: fun convert 它本身是一个扩展函数。否则,成员函数优先。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Alexey Romanov    8 年前

    问题中所述的类型不匹配: Converter<K, V>.to takes V , not K . 所以 converter.to(value) 解析为扩展方法,因为它不能是成员方法。

    当然,这意味着你自己的答案也行不通;也许你修改了一些类型,如果你尝试 转换为(值) 现在应该可以了。