标准库中的Kotlin重载解析歧义

在Kotlin 0.12.1230中,似乎不推荐使用的API阻止了替换的使用。

例如,编译器会抱怨下面的代码片段,因为它“不能在没有完成类型推断的情况下选择…候选者”

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<T> ,完成它,但现在我的代码显式依赖于不赞成的类型,当我不想这样做:

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

希望有更好的办法?

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