首页 文章

Kotlin:扩展功能与成员功能与调度接收器

提问于
浏览
0

Kotlin有一个 A.to(that: B) 扩展函数,它接受任何两种类型的参数并返回 Pair<A,B> . 现在我有一个带有 to 函数的类,需要两个参数 .

基本上,两个不同的 to 函数具有确切的语法,并且类中的函数被扩展名1掩盖 .

Example

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

Jooq转换器是一个相当流行的类,用于在Database兼容类和自定义类之间进行转换 .

根据Kotlin的documentation,扩展函数优先于类方法,这对于kotlin包提供的扩展方法没有意义,因为它们的范围是全局的 . 有扩展功能的qualified-this解决方法,但它似乎没有帮助

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

1 回答

  • 1

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

    当然,这意味着你自己的答案也行不通;可能你修改了一些类型,如果你现在尝试 converter.to(value) 它应该工作 .

相关问题