J'ai essayé la solution ci-dessus avec tryCast<Array<String?>>
et, je suppose que dans ma tâche spécifique de listing avec de nombreux castings impliqués, ce n'était pas une si bonne idée, car cela ralentissait drastiquement les performances.
C'est la solution que j'ai finalement adoptée - vérifier manuellement les entrées et appeler les méthodes, comme ceci :
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?>?) {
}