Deklarieren ein Feld mit dem Schlüsselwort final
Wenn ich die folgende Aussage, die innerhalb einer Klasse, wo Synapse
ist ein abstrakter Typ:
private final List<Synapse> synapses;
Tut final
erlauben Sie mir, noch in der Lage, ändern Sie den Status der Synapse
Objekte in der List
, aber mich davon abhalten, das hinzufügen neuer Synapse
Objekte zu der Liste? Wenn ich falsch bin, könnten Sie bitte erklären, was final
ist zu tun und Wann sollte ich mit dem keyword final
statt.
InformationsquelleAutor Q Liu | 2012-10-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, das Schlüsselwort final nicht in die Liste, oder deren Inhalt unveränderlich. Wenn Sie möchten, eine unveränderliche Liste, die Sie verwenden sollten:
Was das Schlüsselwort final tut, ist zu verhindern, dass Sie einen neuen Wert zuweisen die 'Synapsen' variable. I. e., Sie können nicht schreiben:
Können Sie jedoch schreiben:
unmodifiableList
gebaut wie dieser, die Elemente der Liste können immer noch Ihren Zustand geändert haben (wenn Sie sind veränderlich). Nichts über die Liste Erklärung oder Konstruktion kann das verhindern.final List<Synapse> synapses = createList();
tun, und dannsynapses.add(newSynapse())
? Dann heißt essynapses
nicht irgendetwas anderes, aber diese Liste richtig?synapses
ist ein veränderliches Objekt wie ArrayList.final
verhindert, dass Sie von Neuzuweisensynapses
nachdem Sie zugewiesen haben es einmal - Sie können noch hinzufügen/entfernen von Elementen, wie Sie normalerweise würden. Lesen Sie mehr über diefinal
Stichwort hier.The Java Language Specification schreibt:
Daher, wenn Sie erzwingen möchten, dass der Staat erreichbar durch die variable ändert sich nicht, müssen Sie deklarieren die variable
final
verwenden Sie eine unveränderliche Liste (zum Beispiel mit Sammlungen.unmodifiableList), und machenSynapse
Objekte unveränderlich sind.Können Sie noch ändern, hinzufügen und entfernen, den Inhalt der Liste, aber kann nicht erstellen Sie eine neue Liste der Variablen zugewiesen.
Die endgültige Umsetzung bedeutet, dass die Objekt-Referenz nach der Initialisierung die Referenz selbst kann nie geändert werden, aber der Inhalt kann natürlich sein. Seine nicht gegen die Regeln verstoßen überhaupt. Sie haben angegeben, nur eine Regel, die über die Referenz ändern, die arbeiten entsprechend. Wenn Sie wollen, dass die Werte sollten auch nie ändern, sollten Sie gehen für unveränderliche Listen ich.e
Sehen die folgenden Fragen.