标准库中的Kotlin重载解析歧义
在Kotlin 0.12.1230中,似乎不推荐使用的API阻止了替换的使用。
例如,编译器会抱怨下面的代码片段,因为它“不能在没有完成类型推断的情况下选择…候选者”
val seq = sequenceOf("1") val first = seq.firstOrNull()
候选是Sequence<T>.firstOrNull
和Stream<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集成中长期存在的缺陷引起的)引起的。 一旦版本冲突解决,编译器不再抱怨。