Просто чтобы убедиться, что мы на одной странице, it
- это Char
, потому что используемый вами метод filter
работает со строкой как последовательность символов.
ОшибкаВы получаете это потому, что оператор ==
является более строгим, чем его аналог метода equals()
, и требует соответствия типа.Поскольку "a"
является строкой, вы не можете использовать оператор для сравнения ее с символом it
.
Обратите внимание, что даже если компилируется версия с equals()
, она бы не сработала, потому что строка никогда бы не равнялась никаким символам.По этой причине ребята из Kotlin сделали это ошибкой компиляции для оператора: больше безопасности типов.
Насколько я понял, они следовали соглашению Java для метода equals
и оставили свой контракт разрешительным дляразрешив Any?
в качестве параметра.Вероятно, это связано с ограничениями взаимодействия с Java.
Даже если операторы компилируются в эквивалентные вызовы методов, компилятор имеет дополнительные проверки в форме операторов по сравнению с явными вызовами методов.