【发布时间】:2019-02-16 22:11:42
【问题描述】:
阅读关于SAM Conversions的Java互操作文档,我期待Kotlin函数
Collections.sortWith(comparator: kotlin.Comparator<in T> /* = java.util.Comparator<in T> */)
能够在不需要显式指定参数的情况下采用 lambda 函数是 Comparator。但是下面的代码给出了type inference failed:
val someNumbers = arrayListOf(1, 5, 2)
someNumbers.sortWith({ x, y -> 1 })
而:
val someNumbers = arrayListOf(1, 5, 2)
someNumbers.sortWith(Comparator { x, y -> 1 })
编译并正确运行
【问题讨论】:
-
有趣的是它适用于
Collections.sort(arrayList, { x, y -> 1 }) -
如果
sortWith宁愿接受comparator: (T, T) -> Int类型的比较器,它可以在不指定Comparator的情况下工作...但我现在不知道我应该如何处理这些信息;- ) 这实际上并没有那么大的帮助,因为我们将需要Collections.sort.(this) { x, y -> comparator(x, y) }在sortedWith中而不是......(我只是在大声思考) -
非常有趣的阅读:Kotlin issue #7770 - SAM for Kotlin classes,也许也值得竖起大拇指;-) 另外:#11129 SAM conversion for kotlin function...也许在 1.3 中会有一些东西...虽然还没有看到...
标签: kotlin kotlin-interop