gpt4 book ai didi

kotlin - 为什么 Kotlin 不能推断比较器的类型

转载 作者:IT老高 更新时间:2023-10-28 13:36:09 24 4
gpt4 key购买 nike

阅读有关 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 })

正确编译并运行

最佳答案

阅读 Kotlin issue 'SAM for Kotlin classes' 的评论后我学到了很多关于 SAM 转换以及为什么引入 typealias 的知识,但还不知道为什么这个特定的行为还没有解决......而且我不是唯一一个问题及其评论显示.

总而言之,SAM 转换仅考虑用于 Java 接口(interface)(也可比较 this comment)。 Jetbrains 确实进行了(或仍需要进行)更大的重构,并尝试解决该问题,以便 SAM 也可用于 Kotlin 函数本身(也可比较 this comment )。他们正在努力支持SAM conversion for kotlin functions in a separate issue ,它可能与 1.3 一起提供。因为我目前正在测试 1.3:我还没有看到任何关于此的内容。所以也许,如果你像我一样喜欢 SAM 转换,你可能想要投票 SAM for Kotlin classesSAM conversion for kotlin function或两者兼而有之。

顺便说一句:a very similar example was also used by Ilya Gorbunov using arrayOf().sort .

关于kotlin - 为什么 Kotlin 不能推断比较器的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52292293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com