Comment est-il possible de déclarer et d'initialiser un tableau de constantes en Java sans utiliser enums
?
static final Type[] arrayOfConstants = new Type[10]; // not an array of constants
Si vous voulez créer un tableau immuable, non, vous ne pouvez pas. Tous les tableaux en Java sont mutables.
Si vous voulez juste prédéfinir le tableau dans votre classe, vous pouvez le faire:
private static final int[] MY_ARRAY = {10, 20, 30, 40, 50};
Ici, nous avons créé un tableau prédéfini MY_ARRAY
de longueur 5, donc MY_ARRAY[0]
est 10
et ainsi de suite. Attention, même si le champ MY_ARRAY
est déclaré final, cela ne signifie pas que les éléments du tableau ne peuvent pas être modifiés. Il est donc préférable de ne pas exposer un tel tableau au public via le modificateur public
ou protected
.
Je veux dire que les composants du tableau sont des constantes, c'est-à-dire qu'un [0] soit une variable constante comme ceci public static final int SIZE = 10;
Vous ne pouvez pas donner de noms aux index de tableaux.
Vous pouvez initialiser un tableau en utilisant les valeurs de constantes préexistantes:
public static final int SIZE = 10;
public static final int[] CONSTANTS = { SIZE };
Gardez à l'esprit que, bien qu'un tableau soit déclaré final
, ses valeurs peuvent toujours être modifiées. final
garantit uniquement que vous ne pouvez pas réaffecter la variable de tableau. Vous souhaitez donc encapsuler le tableau pour empêcher la mutation:
final class Constants {
public static final int SIZE = 10;
private static final int[] CONSTANTS = { SIZE };
public static int getConstant(int index) {
return CONSTANTS[index];
}
}
Si vous souhaitez effectuer une boucle, je suggère de renvoyer un deep-copy du tableau.
Si vous ne souhaitez pas modifier les valeurs et que vous souhaitez simplement accéder aux membres de la collection sans vouloir un accès aléatoire, une solution très simple au lieu d'avoir un tableau constant, a une liste finale immuable:
static final ImmutableList<Type> arrayOfConstants = ImmutableList.of(t1, t2, t3);
-Si vous connaissez les valeurs à l'avance, initialisez les valeurs du tableau et marquez-le comme suit: final
.
-Si vous ne connaissez pas les valeurs au départ, écrivez des méthodes getter/setters publiques et déclarez le tableau sous la forme private
. Écrire une logique dans la méthode de définition pour ignorer les modifications une fois effectuées sur un élément particulier (ou lever une exception lorsque plusieurs modifications sont apportées au même élément)
si final est utilisé avec des objets, vous ne pouvez pas modifier la référence de cet objet, mais la valeur est parfaitement correcte.Array est un objet en Java et si vous souhaitez que la valeur de l'objet ne soit pas modifiée, une fois créé, vous devrez le rendre immuable. et le tableau primitif ne peut pas être rendu immuable en Java.
final int [] finalArr={5,6,8};
System.out.println("Value at index 0 is "+finalArr[0]);
//output : Value at index 0 is 5
//perfectly fine
finalArr[0]=41;
System.out.println("Changed value at index 0 is "+finalArr[0]);
//Changed value at index 0 is 41
int[] anotherArr={7,9,6};
// finalArr=anotherArr;
//error : cannot assign a value to final variable finalArr
Pour plus d'informations sur le tableau immuable, vous pouvez vous référer à ces liens:
Est-il possible de faire un tableau ordinaire immuable en Java?
Cela fait un moment que ce poste est ouvert, je suis surpris, pourquoi personne ne penserait à
public static final List<LanguageModel> GenderDataSource = new ArrayList<GenderModel>(){{
add(new LanguageModel("0", "English"));
add(new LanguageModel("1", "Hindi"));
add(new LanguageModel("1", "Tamil"));
};};
Où LanguageModel contient simplement deux propriétés Id et Title ou utilisez la classe de modèle de type générique que vous souhaitez.
Devrait fonctionner aussi bien que constant.
- N Baua