Maison >Java >javaDidacticiel >Quels sont les cas d'utilisation courants de l'utilisation des fermetures en Java ?

Quels sont les cas d'utilisation courants de l'utilisation des fermetures en Java ?

王林
王林original
2024-05-04 08:15:01594parcourir

Les cas d'utilisation courants des fermetures en Java incluent : Pour définir des gestionnaires d'événements afin qu'ils puissent accéder aux variables dans la portée de la méthode qui les contient. Utilisé pour gérer l'état en dehors du cycle de vie de l'objet en fournissant des méthodes pour accéder et modifier les variables. Utilisé pour retarder l'initialisation d'un objet jusqu'à ce qu'il soit nécessaire pour la première fois. Utilisé pour simuler les dépendances externes dans les tests afin d'augmenter la flexibilité des tests. Il peut également être utilisé pour enregistrer des informations contextuelles, créer des rappels avec différents comportements, implémenter des modèles singleton et simuler des appels de méthode, etc.

在 Java 中使用闭包的常见用例是什么?

Cas d'utilisation courants de l'utilisation de fermetures en Java

Une fermeture est une fonction qui a accès à une variable de portée externe, même en dehors de sa portée de définition. En Java, les fermetures sont des classes internes anonymes (classes anonymes).

Voici quelques cas d'utilisation courants pour l'utilisation des fermetures en Java :

Gestionnaires d'événements

Les fermetures sont souvent utilisées pour définir des gestionnaires d'événements afin qu'ils aient accès à la portée de la méthode qui les contient. Par exemple :

JButton button = new JButton("Click me");
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // 可以访问包含这个闭包的方法的作用域中的变量
        System.out.println("Button clicked!");
    }
});

State Management

Les fermetures peuvent être utilisées pour gérer l'état en dehors du cycle de vie de l'objet. Par exemple, la fermeture suivante contiendra un entier et fournira des méthodes pour y accéder :

public class StateManager {
    private int state;

    public IntSupplier getStateSupplier() {
        return () -> state;
    }

    public Consumer<Integer> setStateConsumer() {
        return (newState) -> state = newState;
    }
}

Initialisation paresseuse

Les fermetures peuvent être utilisées pour retarder l'initialisation d'un objet jusqu'à ce qu'il soit nécessaire pour la première fois. Par exemple, la fermeture suivante n'initialisera value que la première fois que la méthode getValue() est appelée : getValue() 方法时初始化 value

public class LazyValue {
    private final Supplier<Integer> valueSupplier;
    private Integer value;

    public LazyValue(Supplier<Integer> valueSupplier) {
        this.valueSupplier = valueSupplier;
    }

    public Integer getValue() {
        if (value == null) {
            value = valueSupplier.get();
        }
        return value;
    }
}

测试

闭包可用于在测试中模拟外部依赖项,从而提高测试的灵活性。例如,下面的闭包模拟一个 save() 方法,它将始终返回 true

public class MockDataStore {
    public Supplier<Boolean> getSaveSuppler() {
        return () -> true;
    }
}

Testing

Les fermetures peuvent être utilisées dans des tests Mock dépendances externes pour augmenter la flexibilité des tests. Par exemple, la fermeture suivante simule une méthode save() qui renverra toujours true, ce qui est utile pour les tests unitaires :
    rrreee
  • Autres cas d'utilisation
  • Enregistrez les informations contextuelles pour une utilisation ultérieure
  • Créez des rappels avec différents comportements
🎜Implémentez un modèle singleton 🎜🎜Appels de méthode simulés🎜🎜

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