gpt4 book ai didi

kotlin - Kotlin平台类型和泛型

转载 作者:行者123 更新时间:2023-12-02 13:15:26 26 4
gpt4 key购买 nike

我被困在最后一个Kotlin Koans任务28中,当我尝试调用partitionTo函数时收到以下错误消息:

Error:(25, 12) Kotlin: Type inference failed. Expected type mismatch: found: kotlin.Pair<kotlin.Collection<kotlin.String!>, kotlin.Collection<kotlin.String!>> required: kotlin.Pair<kotlin.List<kotlin.String>, kotlin.List<kotlin.String>>
Error:(30, 12) Kotlin: Type inference failed. Expected type mismatch: found: kotlin.Pair<kotlin.Collection<kotlin.Char!>, kotlin.Collection<kotlin.Char!>> required: kotlin.Pair<kotlin.Set<kotlin.Char>, kotlin.Set<kotlin.Char>>

我读到,类型结尾的感叹号标记为平台类型。但是然后我会期望类型 java.lang.String!而不是 kotlin.String!。我是否必须在某处强制执行null检查?也许有人可以帮我完成最后的任务。我正在使用IntelliJs Kotlin插件版本0.10.195。

这是我的代码:
fun List<String>.partitionWordsAndLines(): Pair<List<String>, List<String>> {
return partitionTo(ArrayList<String>(), ArrayList<String>()) { s -> !s.contains(" ") }
}
fun Set<Char>.partitionLettersAndOtherSymbols(): Pair<Set<Char>, Set<Char>> {
return partitionTo(HashSet<Char>(), HashSet<Char>()) { c -> c in 'a'..'z' || c in 'A'..'Z'}
}
inline fun <reified T> Collection<T>.partitionTo(first: MutableCollection<T>, second: MutableCollection<T>, predicate: (T) -> Boolean): Pair<Collection<T>, Collection<T>> {
for (element in this) {
if (predicate(element)) {
first.add(element)
} else {
second.add(element)
}
}
return Pair(first, second)
}

最佳答案

问题是您答应返回一对List:

fun List<String>.partitionWordsAndLines(): Pair<List<String>, List<String>> {

但实际上返回了一对 Collection:
inline fun <reified T> Collection<T>.partitionTo(...): Pair<Collection<T>, Collection<T>> {

任务的有用提示:
    The signature of the function 'toCollection()' from standard library may help you.

在这里查看: https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/src/generated/_Snapshots.kt#L207

附言为什么要在 inline上使用 reifiedpartitionTo

关于kotlin - Kotlin平台类型和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com