En Java, nous pourrions faire ce qui suit
public class TempClass {
List<Integer> myList = null;
void doSomething() {
myList = new ArrayList<>();
myList.add(10);
myList.remove(10);
}
}
Mais si nous le réécrivons directement en Kotlin comme ci-dessous
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
myList!!.add(10)
myList!!.remove(10)
}
}
J'ai eu l'erreur de ne pas trouver add
y remove
de ma liste
Je contourne le casting en ArrayList, mais c'est bizarre d'avoir à le faire, alors qu'en Java le casting n'est pas nécessaire. Et cela va à l'encontre de l'objectif de la classe abstraite List.
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
(myList!! as ArrayList).add(10)
(myList!! as ArrayList).remove(10)
}
}
Existe-t-il un moyen d'utiliser une liste sans avoir à la couler, comme cela pourrait être fait en Java ?
1 votes
Juste un commentaire sur la raison pour laquelle vous ne pouvez pas faire
myList = null
et puis plus tard appeler ajouter sans!!
. Vous pouvez contourner ce problème en utilisant l'optionlateinit
mot-clé devant votre propriété comme ceci :lateinit var myList: List<Int>
De cette façon, vous n'aurez pas besoin d'initialiser la liste immédiatement, mais vous garantissez au compilateur que vous l'initialiserez avant d'utiliser la liste la première fois. C'est une solution plus souple, mais elle vous impose une responsabilité en tant que développeur.