Zugriff auf Variablen im enthaltenen Bereich
Zugriff auf lokale Variablen
Änderungsbeschränkung
Kann nicht geändert werden:
Änderung von Instanzvariablen
Ein Lambda-Ausdruck kann:
Beispiel: Lokale Variable aus externem Bereich erfassen
Code:
interface MyFunc { int func(int n); } class VarCapture { public static void main(String args[]) { // Variável local que pode ser capturada int num = 10; MyFunc myLambda = (n) -> { // Uso correto da variável num int v = num + n; // A instrução abaixo é inválida porque tenta modificar num // num++; return v; }; // Usando a expressão lambda System.out.println(myLambda.func(8)); // Exibe: 18 // Modificar num aqui também causaria erro // num = 9; } }
Erklärung:
Num Capture:
Die Nummer ist effektiv endgültig, da sie nach der ersten Zuweisung nicht geändert wird.
Lambda kann auf num zugreifen, es aber nicht ändern.
Ausführung:
myLambda.func(8) gibt 18 zurück, weil:
num (10) wird zum Parameter n (8) addiert, was 18 ergibt.
Fehler aufgrund einer Änderung:
Das Auskommentieren von num oder num = 9 würde die Erfassung ungültig machen und einen Kompilierungsfehler verursachen.
Hinweis:
Wichtig: Instanz- oder statische Variablen können innerhalb von Lambda-Ausdrücken ohne Einschränkungen verwendet und geändert werden.
Einschränkungen gelten nur für lokale Variablen mit externem Bereich.
Das obige ist der detaillierte Inhalt vonLambda-Ausdrücke und Erfassungsvariablen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!