2017-10-08 32 views
-1

我试图列表转换的LinkedList在科特林,这里是我的错误代码的IntelliJ无法转换为集合中科特林

Intellij saying that this won't do

但在科特林REPL我可以做这样的事情

But this is perfectly normal

这有什么错我的代码?

+1

请发表您的代码文字(+错误信息)不作为截图。其他人无法搜索文字 –

回答

2

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

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

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

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

此外,您还可以使用mapNotNullTo结合toCollectionmap电话:

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

1

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