Comment dois-je déclarer une constante de le rendre visible pour chaque instance de la classe?

Je voudrais avoir une constante dans ma classe qui serait visible pour toutes les instances de la classe.

Tout d'abord, je ne sais pas si j'ai besoin de le déclarer comme "statique". Autant je comprends tout changement d'un champ statique (fait par l'une des instances) qui sera vu par les autres instances (de manière statique de la variable n'est pas liée à une instance spécifique). En outre, un champ statique modifications peuvent être apportées sans l'utilisation de n'importe quelle instance (nous travaillons directement avec la classe). Donc, toutes ces propriétés spéciales du champ statique sont liés à la façon dont il peut être changé et quels en seront les effets de ces changements. Mais dans mon cas, je voudrais avoir une constante (de sorte que les "changements" questions ne sont pas pertinentes ici). Alors, probablement que je n'ai pas besoin d'utiliser "statique". Droit?

Deuxième, mon jeu contient un grand nombre d'éléments et je ne veux pas définir la valeur de l'ensemble à la fois (quand j'ai créer la variable). En d'autres termes, je voudrais déclarer un ensemble, puis ajouter des éléments de cet ensemble, étape par étape. Mais je ne peux pas le faire si je travaille avec des constantes. Est-il possible d'spécifié de la valeur de l'ensemble et ensuite faire-il constant?

Troisième, j'ai réalisé qu'il peut y avoir quelques problèmes si j'essaie de modifier la valeur des variables en dehors de toute méthode. Donc, comment ça fonctionne?

AJOUTÉ:

OK. Merci pour la réponse, j'ai compris qu'il devrait être "définitive" et "statique" (puisqu'il est constant et il ne sera pas associé à un cas particulier, il devrait juste être visible à l'ensemble des instances de la classe). Cependant j'ai encore un problème. Je voulais spécifier le jeu en utilisant "ajouter" et je ne peux pas ajouter à la série si elle est constante (final). De plus, je ne peut pas modifier les valeurs des variables en dehors de méthodes (pourquoi?). De toute façon, je ne suis pas d'insister sur l'utilisation de "ajouter" pour définir l'ensemble. Je suis prêt à le définir à la fois. Mais je ne sais pas comment le faire. J'ai essayé des choses comme ça:

final static Set allowedParameters = new HashSet("aaa","bbb");
final static Set allowedParameters = new HashSet(["aaa","bbb"]);
final static Set allowedParameters = new HashSet({"aaa","bbb"});
final static Set allowedParameters = new HashSet(Arrays.asList({"userName"}));

Et ils n'ont pas de travail.

AJOUTÉ 2:

Quelqu'un peut-il m'expliquer, les moyens, le code donné par Tadeusz Kopec?

class YourClass {
    private static void fillSet(Set<SomeType> set) {
        //here you add elements, like
        set.add(new SomeType());
    }
    private final static Set<SomeType> yourSetField;
    static {
        final Set<SomeType> tempSet = new HashSet<SomeType>();
        fillSet(tempSet);
        yourSetField = Collection.unmodifiableSet(tempSet);
    }
}

1. Le fillSet méthode a une variable appelée "set". Pourquoi il n'est pas utilisé dans la méthode?

2. Qu'est-ce que SomeType() dans le fillSet? Quelle est cette méthode?

3. Ce n' fillSet faire? Plus tard dans l'exemple, nous donnons un ensemble vide de cette méthode. Pour quoi?

4. Pour quoi faire nous déclarons tempSet comme définitive?

5. Qu'est-ce exactement unmodifiableSet faire? Selon le nom qu'il génère un ensemble qui ne peut pas être modifié, je pense. Mais pourquoi serait-il insuffisant pour déclarer yourSetField comme final? Qu'il serait constante.

Quand vous dites "set" entendez-vous java.util.Set<?> ?
"Je ne veux pas définir la valeur de l'ensemble à la fois". Qu'est-ce que cela signifie? que vous voulez être en mesure d'ajouter à l'ensemble dans l'avenir?
Oui.
Je voulais dire que, dans le début de mon programme, je tiens à préciser en ajoutant de nouveaux éléments (étape par étape). Après cela, je ne veux pas changer le jeu plus. Donc, je ne veux pas être en mesure d'ajouter à l'ensemble dans l'avenir.
L'utilisation d'un initialiseur statique bloc. Regarde ma réponse.

OriginalL'auteur Roman | 2010-03-10