Wie soll ich das deklarieren Sie eine Konstante sichtbar, die für jede Instanz der Klasse?

Ich würde gerne eine Konstante in meiner Klasse, die sichtbar sein würde, die für alle Instanzen der Klasse.

Ersten, ich weiß nicht, ob ich brauche, um zu erklären Sie als "static". Soweit ich das verstanden habe, bei änderungen ein statisches Feld (eine der Instanzen) gesehen werden, die von anderen Instanzen (also statische variable ist nicht gebunden an eine bestimmte Instanz). Darüber hinaus wird ein statisches Feld kann Veränderungen ohne Einsatz von Instanz (wir arbeiten direkt mit der Klasse). So, alle diese speziellen Eigenschaften des statischen Feldes im Zusammenhang mit der Art und Weise wie es verändert werden kann und was werden die Auswirkungen dieser änderungen. Aber in meinem Fall möchte ich eine Konstante (also die "änderungen" Fragen sind hier nicht relevant). So, wahrscheinlich brauche ich mich nicht zu verwenden, "static". Richtig?

Zweiten, in meinem set enthalten eine Menge von Elementen und ich möchte nicht, definieren Sie den Wert der auf einmal (wenn ich eine variable anlegen). In anderen Worten möchte ich erklären, ein Satz, dann fügen Sie Elemente, um diese Schritt für Schritt. Aber ich kann es nicht tun, wenn ich die Arbeit mit den Konstanten. Ist es möglich zum angegebenen Wert der eingestellt und dann konstant?

Dritten habe ich gemerkt, dass es einige Probleme, wenn ich versuche, ändern Sie den Wert der Variablen außerhalb der Methode. Also, wie funktioniert es?

HINZUGEFÜGT:

OK. Dank der Antwort habe ich verstanden, dass es sein sollte "final" und "static" (da es eine Konstante festgelegt, und es wird nicht verbunden mit einer bestimmten Instanz, es sollte nur sichtbar sein, um alle Instanzen der Klasse). Aber ich habe noch ein problem. Ich wollte angeben das set mit "add" und ich kann hinzufügen, um die eingestellte, wenn es Konstanten (final). Außerdem kann ich nicht ändern Sie die Werte der Variablen außerhalb von Methoden (warum?). Wie auch immer, ich glaube nicht darauf bestehen, auf die Verwendung von "hinzufügen", um das Setup zu definieren. Ich bin bereit, Sie zu definieren, es auf einmal. Aber ich weiß nicht, wie es zu tun. Ich habe versucht, Dinge wie, dass:

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

Und Sie hat nicht funktioniert.

HINZUGEFÜGT 2:

Kann jemand mir erklären, bitten, den code von 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. Die fillSet Methode eine variable mit dem Namen "set". Warum ist es nicht in die Methode?

2. Was ist SomeType() im fillSet? Was macht diese Methode?

3. Was bedeutet fillSet tun? Später im Beispiel geben wir eine leere Menge zu dieser Methode. Was für?

4. Was für die tun wir erklären tempSet als final?

5. Was genau unmodifiableSet tun? Nach den Namen generieren Sie ein set, das nicht geändert werden kann, denke ich. Aber warum sollte es nicht ausreichen, zu erklären yourSetField als final? Als wäre es konstant zu.

Wenn du sagst "eingestellt" meinst du java.util.Set<?> ?
"Ich möchte nicht, definieren Sie den Wert der auf einmal". Was bedeutet das? Sie wollen in der Lage sein, um die Menge in Zukunft?
Ja.
Ich meinte, dass ganz am Anfang von meinem Programm, das ich angeben möchten, legen Sie durch hinzufügen von neuen Elementen (Schritt für Schritt). Nach, dass ich nicht wollen, ändern Sie den Satz nicht mehr. So, dann möchte ich nicht in der Lage sein, um hinzuzufügen, um den Satz in die Zukunft.
Verwenden Sie einen statischen Initialisierer block. Blick auf meine Antwort.

InformationsquelleAutor Roman | 2010-03-10

Schreibe einen Kommentar