web-dev-qa-db-fra.com

Tableau Java de constantes

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
5
Athanasios V.

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.

6
Tagir Valeev

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.

2
Vince Emigh

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);
1
Florin Grigoriu

-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)

0
Mustafa sabir

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:

Tableau immuable en Java

Est-il possible de faire un tableau ordinaire immuable en Java?

0
Atul Raj

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"));
};};

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

0
NBaua