Heim > Java > javaLernprogramm > Warum erfordern Lambda-Ausdrücke finale oder effektiv finale Variablen?

Warum erfordern Lambda-Ausdrücke finale oder effektiv finale Variablen?

Linda Hamilton
Freigeben: 2024-12-25 10:08:09
Original
811 Leute haben es durchsucht

Why Do Lambda Expressions Require Final or Effectively Final Variables?

Variable, die im Lambda-Ausdruck verwendet wird, erfordert Endgültigkeit

Die Fehlermeldung „Variable, die im Lambda-Ausdruck verwendet wird, sollte endgültig oder tatsächlich endgültig sein“ erscheint, wenn versucht wird, eine nicht-finale Variable zu verwenden Variable innerhalb eines Lambda-Ausdrucks. Diese Anforderung stellt die Unveränderlichkeit der erfassten Variablen sicher.

Im bereitgestellten Codeausschnitt:

private TimeZone extractCalendarTimeZoneComponent(Calendar cal, TimeZone calTz) {
    ...
    cal.getComponents().getComponents("VTIMEZONE").forEach(component -> {
        ...
        if (calTz == null) {
            calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
        }
    });
    ...
}
Nach dem Login kopieren

Die Variable calTz wird innerhalb des Lambda-Ausdrucks verwendet und hat keinen garantierten Endstatus. Dies verstößt gegen die Regel, dass Lambda-Ausdrücke nur Variablen erfassen können, die endgültig oder tatsächlich endgültig sind.

Warum gibt es diese Regel? Die Java Language Specification (JLS) erklärt in §15.27.2, dass sie den Zugriff auf sich dynamisch ändernde lokale Variablen verhindert und so Parallelitätsprobleme entschärft. Indem sichergestellt wird, dass erfasste Variablen unveränderlich sind, verringert die Sprache das Risiko von Fehlern.

Diese Anforderung gilt auch für anonyme innere Klassen. Variablen, die in solchen Klassen verwendet werden, müssen ebenfalls endgültig oder tatsächlich endgültig sein, um die Thread-Sicherheit zu gewährleisten.

Das obige ist der detaillierte Inhalt vonWarum erfordern Lambda-Ausdrücke finale oder effektiv finale Variablen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage