无法在 kotlin 中转换为集合

Yar*_*ick -1 compiler-errors intellij-idea kotlin

我正在尝试在 kotlin 中将 List 转换为 LinkedList,这是我的代码,其中包含来自 intellij 的错误

Intellij 说这不行

但在 Kotlin REPL 中我可以做这样的事情

但这是完全正常的

我的代码有什么问题吗?

Yoa*_*erg 6

else分支中,您不返回任何内容,这意味着您返回Unit单例。 Unit不是 的子类型Token。因此,Kotlin 编译器采用Unit共享Token父类:Any(Kotlin 的基类,如ObjectJava 中的基类)。

Unit您应该在 else 分支上抛出 Exception ,而不是返回,以向编译器发出信号,表明这种情况不会发生。

但是,如果您只想忽略额外的字符。您可以在 else 分支上返回 null,并用于mapNotNull过滤:

toParse.mapNotNull { ... }.toCollection(LinkedList<Token>())

另外,您可以使用以下方式组合toCollection和调用:mapmapNotNullTo

toParse.mapNotNullTo(LinkedList<Token>()) { ... }