Maison  >  Article  >  Java  >  Les fonctions Java prennent-elles en charge les fermetures ? Comment mettre en œuvre la fermeture ?

Les fonctions Java prennent-elles en charge les fermetures ? Comment mettre en œuvre la fermeture ?

PHPz
PHPzoriginal
2024-05-02 13:36:02949parcourir

Java ne prend pas en charge les vraies fermetures, mais elles peuvent être simulées via des classes internes anonymes. Les fermetures dans les classes internes anonymes peuvent accéder aux variables externes même si la fonction qui les a créées est terminée, mais les variables externes ne peuvent pas être déclarées ou modifiées en dehors de la fonction, et les expressions lambda ne peuvent pas capturer directement les variables externes.

Java 函数是否支持闭包?如何实现闭包?

Fermetures dans les fonctions Java

Introduction aux fermetures

Une fermeture est une fonction qui a accès aux variables définies dans la fonction qui l'a créée. La fermeture peut toujours accéder à ces variables même si la fonction qui l'a créée a fini de s'exécuter.

Implémentation des fermetures en Java

Java ne prend pas en charge les vraies fermetures. Cependant, en utilisant des classes internes anonymes, nous pouvons simuler le comportement des fermetures.

Cas pratique

Considérez l'extrait de code suivant :

public class LambdaClosure {

    public static void main(String[] args) {
        int x = 10;
        Runnable closure = () -> System.out.println(x);
        
        // 调用闭包
        closure.run();
    }
}

Dans ce cas :

  • x est une variable locale, qui est définie dans le main() méthode milieu. x 是一个局部变量,它被定义在 main() 方法中。
  • 匿名内部类 Runnable 被用来创建闭包。
  • 闭包 closure 访问了外部变量 x,即使 main()
  • La classe interne anonyme Runnable est utilisée pour créer des fermetures.

La fermeture closure accède à la variable externe x même si la méthode main() est terminée.

Avantages et limites
  • Les avantages des fermetures moqueuses incluent :
  • Elles permettent d'accéder à des variables externes en cas de besoin.

Les variables externes peuvent être capturées dans des classes internes anonymes.

  • Les limitations incluent :
  • Les variables externes ne peuvent pas être déclarées ou modifiées en dehors de la fonction.
🎜L'expression lambda ne peut pas capturer directement les variables externes et des classes internes anonymes doivent être utilisées. 🎜🎜

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!

Déclaration:
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