无法转换为kotlin中的集合

时间:2017-10-08 11:32:10

标签: intellij-idea compiler-errors kotlin

我试图在Kotlin中将List转换为LinkedList,这是我的代码,错误来自intellij

Intellij saying that this won't do

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

But this is perfectly normal

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:2)

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

不应该返回Unit,而应该在else分支上抛出异常,以通知编译器它不会发生。

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

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

此外,您可以使用toCollection合并mapmapNotNullTo来电:

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

答案 1 :(得分:1)

好吧,我想通了,什么时候返回类型为Any,因为else分支返回Unit,而其他分支令牌。所以intellij试图告诉我,这是类型不匹配错误