Невозможно преобразовать в коллекцию в котлин

Я пытаюсь преобразовать список в LinkedList в kotlin, вот мой код с ошибкой от intellij

Intellij говорит, что этого не будет

Но в Kotlin REPL я могу сделать что-то вроде этого

Но это совершенно нормально

Что случилось с моим кодом?

В ветке else вы ничего не возвращаете, это означает, что вы возвращаете Singleton. Unit не является подтипом Token . Поэтому компилятор Kotlin принимает общий родительский класс Unit и Token : Any (базовый класс Kotlin, Like Object в Java).

Вместо того, чтобы возвращать Unit , вы должны выбросить Exception на ветку else, чтобы сигнализировать, что компилятор не может произойти.

Однако, если вы хотите просто игнорировать дополнительные символы. вы можете вернуть null на ветку else и использовать mapNotNull для фильтрации:

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

Кроме того, вы можете комбинировать toCollection и map используя mapNotNullTo :

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

Хорошо, я понял, когда имеет тип возврата Any, потому что else branch возвращает Unit, а другие ветки Token. Поэтому intellij пытается сказать мне, что это ошибка несоответствия типа