Heim >Java >javaLernprogramm >Warum erfordern Lambda-Ausdrücke in Java „endgültige' oder „effektiv endgültige' Variablen?
Lambda-Ausdrücke erfordern „endgültige“ oder „effektiv endgültige“ Variablen
Die Fehlermeldung „Variable, die im Lambda-Ausdruck verwendet wird, sollte endgültig oder effektiv sein.“ final“ gibt an, dass eine in einem Lambda-Ausdruck verwendete Variable als final deklariert werden muss oder bestimmte Kriterien erfüllen muss, um effektiv berücksichtigt zu werden final.
Im bereitgestellten Codeausschnitt:
private TimeZone extractCalendarTimeZoneComponent(Calendar cal, TimeZone calTz) { // Code missing cal.getComponents().getComponents("VTIMEZONE").forEach(component -> { // Code missing if (calTz == null) { calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue()); } }); // Code missing }
Der Fehler wird ausgegeben, weil die Variable calTz im Lambda-Ausdruck nicht als final deklariert ist. Java erfordert, dass in Lambda-Ausdrücken verwendete Variablen endgültig oder tatsächlich endgültig sind, um mögliche Parallelitätsprobleme zu verhindern.
Warum die Anforderung besteht
Die Java-Sprachspezifikation (§15.27.2 ) besagt:
Die Beschränkung auf effektiv endgültige Variablen verbietet den Zugriff auf sich dynamisch ändernde lokale Variablen, deren Erfassung wahrscheinlich dazu führen würde Parallelitätsprobleme.
Im Wesentlichen zielt Java darauf ab, Parallelitätsrisiken zu mindern, indem es die Mutation erfasster Variablen in Lambda-Ausdrücken verhindert. Dies trägt dazu bei, vorhersehbares und korrektes Verhalten in Multithread-Umgebungen sicherzustellen.
Um die Thread-Sicherheit zu gewährleisten und Parallelitätsprobleme zu vermeiden, sollten in Lambda-Ausdrücken verwendete Variablen daher als endgültig oder effektiv endgültig deklariert werden, was bedeutet, dass sie innerhalb der Lambda-Ausdrücke nicht geändert werden können Geltungsbereich.
Das obige ist der detaillierte Inhalt vonWarum erfordern Lambda-Ausdrücke in Java „endgültige' oder „effektiv endgültige' Variablen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!