Probé la solución anterior con tryCast<Array<String?>>
y, supongo, en mi tarea específica de enumerar con muchos castings involucrados no fue tan buena idea, porque estaba ralentizando drásticamente el rendimiento.
Esta es la solución que hice finalmente: verifique manualmente las entradas y los métodos de llamada, como este:
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?>?) {
}