Maison > Java > javaDidacticiel > Expressions Lambda et capture de variables

Expressions Lambda et capture de variables

Mary-Kate Olsen
Libérer: 2025-01-12 06:29:45
original
699 Les gens l'ont consulté

Expressões lambda e a captura de variáveis

Accès aux variables dans la portée confinée

  • Une expression lambda peut accéder :
  • Variables d'instance de la classe contenante.
  • Variables statiques définies dans la classe externe.
  • Le paramètre this, qui fait référence à l'instance appelante de la classe externe.

Accès aux variables locales

  • Lors de l'utilisation de variables locales de portée externe :
  • La variable locale doit être effectivement définitive.
  • Effectivement final : une variable dont la valeur ne change pas après avoir été attribuée.
  • N'a pas besoin d'être explicitement déclaré comme final.
  • Modifier la variable locale (à l'intérieur ou à l'extérieur du lambda) invalide sa capture.

Restriction de modification
Impossible de modifier :

  • Variables locales capturées dans l'expression lambda.
  • La modification de ces variables supprime effectivement leur statut final.

Modification des variables d'instance
Une expression lambda peut :

  • Utiliser et modifier les variables d'instance de la classe appelante.
  • Il n'y a aucune restriction sur le statut "final" pour les variables d'instance.

Exemple : Capture d'une variable locale à partir d'une portée externe
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;
    }
}

Copier après la connexion

Explication :

  • Capture numérique :
    num est effectivement final car il n'est pas modifié après l'affectation initiale.
    Lambda peut accéder au numéro, mais ne peut pas le modifier.

  • Exécution :
    myLambda.func(8) renvoie 18 car :
    num (10) est ajouté au paramètre n (8), produisant 18.

  • Erreur due à une modification :
    Décommenter num ou num = 9 invaliderait la capture, provoquant une erreur de compilation.

  • Remarque :
    Important : les variables d'instance ou statiques peuvent être utilisées et modifiées sans restrictions dans les expressions lambda.
    Les restrictions s'appliquent uniquement aux variables locales de portée externe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal