首页 文章

Kotlin超载解决标准库中的模糊性

提问于
浏览
3

在Kotlin 0.12.1230中,似乎已弃用的API阻止了其替换的使用 .

例如,编译器抱怨以下代码段,因为它“无法在没有完成类型推断的情况下选择...候选人”

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

候选人是 Sequence<T>.firstOrNullStream<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 回答

  • 3

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

相关问题