143 votes

Kotlin : comment travailler avec les castings de listes : Cast non vérifié : kotlin.collections.List<Kotlin.Any?> to kotlin.colletions.List<Waypoint>

Je veux écrire une fonction qui renvoie tous les éléments d'un fichier List qui n'est ni le premier ni le dernier élément (un point de passage). La fonction obtient un List<*> comme entrée. Un résultat ne doit être retourné que si les éléments de la liste sont du type Waypoint :

fun getViaPoints(list: List<*>): List<Waypoint>? {

    list.forEach { if(it !is Waypoint ) return null }

    val waypointList = list as? List<Waypoint> ?: return null

    return waypointList.filter{ waypointList.indexOf(it) != 0 && waypointList.indexOf(it) != waypointList.lastIndex}
}

Lors de l'émission du List<*> a List<Waypoint> je reçois l'avertissement :

Cast non vérifié : kotlin.collections.List vers kotlin.colletions.List

Je n'arrive pas à trouver un moyen de l'implémenter autrement. Quelle est la bonne façon d'implémenter cette fonction sans cet avertissement ?

0voto

Saba Points 320

Kotlin assure la sécurité de type pour les opérations impliquant des génériques au moment de la compilation, tandis qu'au moment de l'exécution, les instances des types génériques ne contiennent pas d'informations sur leurs arguments de type réels. Par exemple, List est effacé pour devenir simplement List<*>. En général, il n'existe aucun moyen de vérifier si une instance appartient à un type générique avec certains arguments de type au moment de l'exécution.

https://kotlinlang.org/docs/typecasts.html#type-erasure-and-generic-type-checks

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X