Heim > Java > javaLernprogramm > Lambda-Ausdrücke und Erfassungsvariablen

Lambda-Ausdrücke und Erfassungsvariablen

Mary-Kate Olsen
Freigeben: 2025-01-12 06:29:45
Original
657 Leute haben es durchsucht

Expressões lambda e a captura de variáveis

Zugriff auf Variablen im enthaltenen Bereich

  • Ein Lambda-Ausdruck kann auf Folgendes zugreifen:
  • Instanzvariablen der enthaltenden Klasse.
  • Statische Variablen, die in der externen Klasse definiert sind.
  • Der Parameter this, der auf die aufrufende Instanz der externen Klasse verweist.

Zugriff auf lokale Variablen

  • Bei Verwendung externer lokaler Bereichsvariablen:
  • Die lokale Variable muss effektiv endgültig sein.
  • Effektiv endgültig: Eine Variable, deren Wert sich nach der Zuweisung nicht ändert.
  • Muss nicht explizit als endgültig deklariert werden.
  • Das Ändern der lokalen Variablen (innerhalb oder außerhalb des Lambda) macht ihre Erfassung ungültig.

Änderungsbeschränkung
Kann nicht geändert werden:

  • Lokale Variablen, die im Lambda-Ausdruck erfasst werden.
  • Durch das Ändern dieser Variablen wird ihr effektiv endgültiger Status entfernt.

Änderung von Instanzvariablen
Ein Lambda-Ausdruck kann:

  • Instanzvariablen der aufrufenden Klasse verwenden und ändern.
  • Es gibt keine Einschränkung hinsichtlich des „endgültigen“ Status für Instanzvariablen.

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;
    }
}

Nach dem Login kopieren

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!

Quelle:dev.to
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