[Java] Machen Sie die Variablen der erweiterten for-Anweisung und für jede Anweisung unveränderlich

Wenn normal deklariert

Wenn Sie die erweiterte for-Anweisung und für jede Anweisung normal deklarieren, lautet sie wie folgt. Da es nicht als "endgültig" deklariert ist, kann es neu zugewiesen werden (normale "for" -Anweisungen werden übersprungen, da eine Neuzuweisung im Prinzip wesentlich ist).

List<Integer> intList = Arrays.asList(1, 2, 3, 4);

for(int i : intList) {
    i = 0; //Kann umgeschrieben werden
}

intList.forEach(it -> {
    it = 0; //Kann umgeschrieben werden
});

In diesem Artikel werden wir diese Inhalte in eine nicht neu zuweisbare Form umschreiben.

Machen Sie die Variable unveränderlich

Für erweiterte Erklärung

Sie können es "unveränderlich" machen, indem Sie es mit "final" deklarieren.

for(final int i : intList) {
    i = 0; //Da es als endgültig deklariert ist, kann es nicht neu zugewiesen werden und es tritt ein Kompilierungsfehler auf.
}

Für jede Aussage

Sie können das Argument "final" setzen, indem Sie den Typ wie unten gezeigt in Klammern angeben.

intList.forEach((final int it) ->
    it = 0; //Da es als endgültig deklariert ist, kann es nicht neu zugewiesen werden und es tritt ein Kompilierungsfehler auf.
);

Eine andere Lösung

Derzeit kann das Argument auch dann endgültig sein, wenn es als anonyme Klasse implementiert wird.

Consumer<Integer> finalConsumer = new Consumer<Integer>() {
    @Override
    public void accept(final Integer it) {
        it = 0; //Da es als endgültig deklariert ist, kann es nicht neu zugewiesen werden und es tritt ein Kompilierungsfehler auf.
    }
};

Entschuldigung

Als dieser Artikel zum ersten Mal veröffentlicht wurde, lautete der Titel und Inhalt "** Indizes können nur für erweiterte Anweisungen in for-Anweisungen, erweiterte Anweisungen für Anweisungen und forEach-Anweisungen ** unveränderlich gemacht werden", aber @ saka1029 wies darauf hin. Wie Sie sehen, war dies ein Fehler, daher habe ich sowohl den Titel als auch den Inhalt komplett neu geschrieben.

Vielen Dank für den Hinweis auf @ saka1029.

Recommended Posts

[Java] Machen Sie die Variablen der erweiterten for-Anweisung und für jede Anweisung unveränderlich
[Java] für Anweisung / erweitert für Anweisung
Ich habe versucht, die erweiterte for-Anweisung in Java zu verwenden
So schleifen Sie Java Map (für jede / erweiterte for-Anweisung)
Unterschied zwischen final und Immutable in Java
Java für Anweisung
Vergleichen Sie die Geschwindigkeit der for-Anweisung und der erweiterten for-Anweisung.
Aktivieren / Deaktivieren von SNI in Java für jede Kommunikation
Machen Sie einen Blackjack mit Java
(Memo) Java für Anweisung
Hash und jede Aussage
[Java] Variablen- und Typtypen
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen
[Java] Unterschied zwischen statischem final und final in Mitgliedsvariablen
Verwenden Sie Variablen für Klassennamen und ID-Namen in haml
Dies und das zum Bearbeiten von ini in Java. : inieditor-java
[Anfänger] Java-Variable / logischer Operator / erweitert für Anweisung [Anmerkung 22]
[Für Anfänger] Erläuterung von Klassen, Instanzen und Statik in Java
Über für Anweisung und wenn Anweisung
[Java] Grundlegende Aussage für Anfänger
Java-Programmierung (Variablen und Daten)
Refactoring: Machen Sie Blackjack in Java
☾ Java / Repeat-Anweisung und Repeat-Steueranweisung
Erstellen Sie mit Java Ihren eigenen einfachen Server und verstehen Sie HTTP
StringUtils.isNotBlank eignet sich für Leerurteile und Nullurteile in Java
Definieren Sie abstrakte Methoden in Java enum und schreiben Sie deren Verhalten
Tipps zur Verwendung von Salesforce SOAP und Bulk API in Java
Java während und für Anweisungen
BCrypt + Verarbeitungszeitmessung für jede Streckenanzahl in Java
Unterschiede im Standardverhalten der Speicher- und CPU-Erkennung auf Kubernetes (GKE) für jede Java-Version
Verwendung von Java-Array-Elementen für, Länge, Wert und erweitert für Anweisungen
Wie man einen revolutionären Diamanten mit Java für Aussage macht wwww
AWS SDK für Java 1.11.x und 2.x.
Anfänger spielen Janken-Spiele in Java
Java für Anfänger, Ausdrücke und Operatoren 1
Java Primer Series (Variationen und Typen)
Beispiel für Codierung und Decodierung in Java
[Für Anfänger] Führen Sie Selenium auf Java aus
Java für Anfänger, Ausdrücke und Operatoren 2
StringBuffer- und StringBuilder-Klasse in Java
Verstehe gleich und hashCode in Java
So benennen Sie Variablen in Java
Einstellungen für das SSL-Debugging in Java
Klassen und Instanzen Java für Anfänger
Hallo Welt in Java und Gradle
[JDBC] Ich habe versucht, den SQLite3-Datenbankzugriff von Java in eine Methode für jede SQL-Anweisung umzuwandeln.
Vergleich der Verarbeitungsgeschwindigkeit zwischen Stream einschließlich Cast und Extended for Statement
[Java] So drehen Sie ein zweidimensionales Array mit einer erweiterten for-Anweisung
Übertragen Sie automatisch Animationen für jeden Titel und speichern Sie sie in einem Ordner
[Java] Heutzutage ist die erweiterte for-Anweisung nicht ausschließlich für List, nicht wahr?
[Java] Variablen, die innerhalb der `for-Anweisung` deklariert sind, können nicht außerhalb des` for-Anweisungsblocks` verwendet werden
Java für Anfänger, Variablen und Typen
Einfach, Slack Bot mit Java zu machen
Blasensortierung durchführen und mit Ruby sortieren auswählen
Erste Schritte für tiefes Lernen in Java
Wichtige Punkte für die Einführung von gRPC in Java
[Für Anfänger] Unterschied zwischen Java und Kotlin
[Java] Unterschiede zwischen Instanzvariablen und Klassenvariablen
darf nicht in der for-Anweisung zurückgegeben werden