【问题标题】:Kotlin overload resolution ambiguity in the standard library标准库中的 Kotlin 重载解析歧义
【发布时间】:2015-08-14 21:44:09
【问题描述】:

在 Kotlin 0.12.1230 中,已弃用的 API 似乎正在阻止使用它们的替代品。

例如,编译器抱怨以下 sn-p,因为它“无法在……未完成类型推断的候选者中进行选择”

val seq = sequenceOf("1")
val first = seq.firstOrNull()

候选人是Sequence<T>.firstOrNullStream<T>.firstOrNull,两者具有相同的签名并且Sequence<T> 扩展Stream<T>。此外,Stream<T> 已被弃用,取而代之的是 Sequence<T>

尝试解决类型推断歧义(如下所示)会导致编译器抱怨“重载解析歧义”。

val seq = sequenceOf("1")
val first = seq.firstOrNull<String?>()

在我们等待已弃用的 API 完全消失时,有什么办法可以解决歧义?

似乎转换为最不具体的类型,在这种情况下是弃用的类型Stream&lt;T&gt;,可以完成它,但现在我的代码显式地依赖于一个弃用的类型,而我不想这样做:

val seq = sequenceOf("1")
val first = (seq as Stream<String>).firstOrNull()

希望有更好的方法吗?

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    这似乎是由我的类路径上的多个 Kotlin 标准库版本冲突引起的(由 Gradle IntelliJ 集成中长期存在的缺陷引起)。一旦解决了版本冲突,编译器就不再抱怨了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多