Je génère une ArrayList d'objets. Voici le code
ArrayList someArrayList = new ArrayList();
Public ArrayList getLotOfData()
{
ArrayList someData = new ArrayList();
return someData;
}
someArrayList = eDAO.getLotOfData();
Une fois que j'ai cet objet ArrayList "someArrayList", je voudrais le déclarer public et définitif et le stocker dans un fichier Constants afin qu'il soit accessible globalement. Existe-t-il un moyen de le faire? Si je déclare un objet Arraylist public et final, je ne pourrais pas lui réaffecter de valeurs. J'ai essayé ce qui suit
public final ArrayList anotherArrayList = new ArrayList();
anotherArrayList.addAll(someArrayList);
J'avais espéré stocker cette "anotherArrayList" en tant qu'objet ArrayList global et l'utiliser, mais cela renvoie une exception nullpointer. Je veux l'utiliser comme une constante de chaîne "ConstantsFile.anotherArrayList". Des idées???
Guava fournit ImmutableList
pour à peu près cette raison. (De plus, il n'a pas la surcharge d'espace inutile que ArrayList
alloue pour faire de la place pour les éléments futurs que vous n'ajouterez pas pour votre application.)
public static final ImmutableList<String> CONSTANTS =
ImmutableList.of("foo", "bar");
Vous pouvez facilement le faire public static final
, mais cela n'empêchera pas les gens de modifier contents.
La meilleure approche consiste à publier en toute sécurité la "constante" en:
Résultat en une seule déclaration finale soignée avec initialisation:
public static final List<String> list = Collections.unmodifiableList(
new ArrayList<String>() {{
add("foo");
add("bar");
// etc
}});
ou, style similaire mais différent pour les éléments simples (qui n'ont pas besoin de code)
public static final List<String> list =
Collections.unmodifiableList(Arrays.asList("foo", "bar"));
Compatible avec Java 1.4:
public static final List STRINGS = Collections.unmodifiableList(
Arrays.asList(new String[] {"foo", "bar"}));
Une telle liste n'est pas modifiable, l'appel de méthodes telles que add()
, remove()
ou set()
entraînera UnsupportedOperationException
.
Pour les versions moins anciennes Java:
public static final List<String> STRINGS = Collections.unmodifiableList(
Arrays.asList("foo", "bar"));
Et enfin, Java 9 est livré avec:
public static final List<String> STRINGS = List.of("foo", "bar");