无法转换为kotlin中的集合

我试图将列表转换为kotlin中的LinkedList,这里是我的代码与intellij错误

Intellij说,这不会做

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

但这是完全正常的

我的代码有什么问题?

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

而不是返回Unit ,你应该在else分支上抛出异常,向编译器发出它不能发生的信号。

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

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

另外,您可以使用mapNotNullTotoCollectionmap调用组合起来:

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

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