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

时间:2018-05-22 13:19:32

标签: kotlin

Kotlin有一个Sub Test() Dim nameCount As Integer Dim names() As String Dim i As Integer nameCount = -1 ReDim Preserve names(0 To 0) For i = 2 To Sheet1.UsedRange.Rows.Count If UBound(Filter(names, Sheet1.Range("C" & i).Value)) = -1 Then nameCount = nameCount + 1 ReDim Preserve names(0 To nameCount) names(nameCount) = Sheet1.Range("C" & i).Value End If Sheet1.Range("C" & i).EntireRow.Interior.colorIndex = Application.Match(Sheet1.Range("C" & i).Value, names, False) Next i End Sub 扩展函数,它接受任意两种类型的参数并返回A.to(that: B)。现在我有一个Pair<A,B>函数的类,需要两个参数。

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

示例

to

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

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

编辑:// following return Pair<k,v> fun convert(value:K, converter: org.jooq.Converter<K,V>) = converter.to(value) 本身就是一个扩展功能。否则,成员函数优先。

1 个答案:

答案 0 :(得分:1)

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

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