首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin平台类型及泛型

Kotlin平台类型及泛型
EN

Stack Overflow用户
提问于 2014-12-28 23:50:19
回答 2查看 1.7K关注 0票数 1

在最后一个Kotlin Koans任务28中,当我试图调用partitionTo函数时,我会收到这些错误消息:

代码语言:javascript
复制
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!。我必须在某个地方强制执行空检查吗?也许有人能帮我完成最后一项任务。我正在使用IntelliJs Kotlin插件版本0.10.195。

这是我的密码:

代码语言:javascript
复制
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)
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-29 05:01:10

问题是,您承诺返回一对Lists:

代码语言:javascript
复制
fun List<String>.partitionWordsAndLines(): Pair<List<String>, List<String>> {

但实际上返回了一对Collections:

代码语言:javascript
复制
inline fun <reified T> Collection<T>.partitionTo(...): Pair<Collection<T>, Collection<T>> {

任务中的一个有用的提示:

代码语言:javascript
复制
    The signature of the function 'toCollection()' from standard library may help you.

请看这里:Snapshots.kt#L207

你为什么要在inlinereified上使用partitionTo

票数 2
EN

Stack Overflow用户

发布于 2014-12-29 04:52:31

检查您的返回类型partitionWordsAndLines(): **Pair, List>**,扩展需要ListSet,其中partitionTo返回Collection

这是固定版本

inline fun <reified T, C: MutableCollection<T>> Collection<T>.partitionTo(first: C, second: C, predicate: (T) -> Boolean): Pair<C, C>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27681817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档