Comment accéder à un public static ArrayList de différentes classes?
Supposons que j'ai une classe
public class c1 {
public static ArrayList<String> list = new ArrayList<String>();
public c1() {
for (int i = 0; i < 5; i++) { //The size of the ArrayList is now 5
list.add("a");
}
}
}
Mais si j'ai accès à la même liste de tableaux dans une autre classe, j'ai une liste avec TAILLE = 0.
public class c2 {
public c2() {
System.out.println("c1.list.size() = " + c1.list.size()); //Prints 0
}
}
Pourquoi est-ce qui se passe. Si la variable est statique, alors pourquoi une nouvelle liste en cours généré pour la classe c2? Comment puis-je être sûr d'obtenir la même liste de tableaux si j'ai accès dans une autre classe?
/****Code révisé********/
public class c1 {
public static ArrayList<String> list = new ArrayList<String>();
public static void AddToList(String str) { //This method is called to populate the list
list.add(str);
}
}
Mais si j'ai accès à la même liste de tableaux dans une autre classe, j'ai une liste avec TAILLE = 0, indépendamment de combien de fois j'ai appelé AddToList méthode.
public class c2 {
public c2() {
System.out.println("c1.list.size() = " + c1.list.size()); //Prints 0
}
}
Comment puis-je m'assurer que même les changements qui apparaissent lorsque j'utilise la liste de tableaux dans une autre classe?
- Utilisation Statique initialiser le bloc d'initialiser c1
Vous devez vous connecter pour publier un commentaire.
Dans votre code, vous devriez appeler le
c1
constructeur afin de remplir leArrayList
. Donc, vous auriez besoin:Mais ce n'est pas bon. La meilleure approche serait initialisation statique à l'aide d'un
static
bloc de code dansc1
classe:Comme une recommandation de Que signifie "programme pour une interface"?, il serait préférable de déclarer la variable comme
List<String>
et de créer une instance commeArrayList
:Une autre recommandation, l'utilisation d'un
static
méthode pour accéder à cette variable au lieu de la rendre publique:static
méthode, et vous devez vous assurer que cestatic
méthode doit être appelée avant d'utiliser lelist
.List<Whatever>
commestatic
, alors vous devez l'initialiser dans un bloc statique.public static List<Whatever>
de façon dynamique.Je suis en train d'essayer d'accéder à une autre classe, mais je reçois toujours un tableau vide.