在Kotlin 0.12.1230中,似乎已弃用的API阻止了其替换的使用 .
例如,编译器抱怨以下代码段,因为它“无法在没有完成类型推断的情况下选择...候选人”
val seq = sequenceOf("1")
val first = seq.firstOrNull()
候选人是 Sequence<T>.firstOrNull
和 Stream<T>.firstOrNull
两个都有相同的签名和 Sequence<T>
extends 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()
希望有更好的方法吗?
1 回答
这似乎是由我的类路径上的Kotlin stdlib的多个冲突版本引起的(由Gradle IntelliJ集成中的长期缺陷引起) . 一旦它们解决了版本冲突,编译器就不再抱怨了 .