Я спробував наведене вище рішення, tryCast<Array<String?>>
і, мабуть, у своєму конкретному завданні в списку з багатьма залученими кастингами це була не така чудова ідея, оскільки це різко сповільнило роботу.
Це рішення, яке я нарешті зробив - перевірити вручну записи та методи виклику, наприклад:
fun foo() {
val map: Map<String?, Any?> = mapOf()
map.forEach { entry ->
when (entry.value) {
is String -> {
doSomeWork(entry.key, entry.value as String)
}
is Array<*> -> {
doSomeWork(entry.key, (entry.value as? Array<*>)?.map {
if (it is String) {
it
} else null
}?.toList())
}
}
}
}
private fun doSomeWork(key: String?, value: String) {
}
private fun doSomeWork(key: String?, values: List<String?>?) {
}