答案 0 :(得分:2)
在else
分支中,您不返回任何内容,这意味着您返回Unit
单例。
Unit
不是Token
的子类型。因此,Kotlin编译器采用Unit
和Token
共享父类:Any
(Kotlin的基类,与Java中的Object
类似。)
不应该返回Unit
,而应该在else分支上抛出异常,以通知编译器它不会发生。
但是,如果您只想忽略额外的字符。你可以在else分支上返回null,并使用mapNotNull
来过滤:
toParse.mapNotNull { ... }.toCollection(LinkedList<Token>())
此外,您可以使用toCollection
合并map
和mapNotNullTo
来电:
toParse.mapNotNullTo(LinkedList<Token>()) { ... }
答案 1 :(得分:1)
好吧,我想通了,什么时候返回类型为Any,因为else分支返回Unit,而其他分支令牌。所以intellij试图告诉我,这是类型不匹配错误