Фильтр определяется звездной проекцией: Filter<*>
, что приводит к функции (Nothing) -> Boolean
, когда вы берете функции с карты:
val pred = it.predicate //inferred type: (Nothing) -> Boolean
Вот почему компилятор не принимает String
в качестве аргумента.
Кроме того, ваши messages
имеют тип ArrayList<Any>
, вы не можете просто использовать их как String
.
Kotlin - статически типизированный язык, он не допустит этих небезопасных попыток.
Чтобы это исправить, вы можете изменить все на String
generics:
val filterMap: MutableMap<Filter<String>, String> = mutableMapOf()
val messages = listOf("Message1")
Я знаю, это не удовлетворит вас, потому что вы ищете общее решение. Но тогда вам придется найти способ безопасного приведения сущностей, которые вы берете из неопределенных коллекций.