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.
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éthodesave()
qui renverra toujours true
, ce qui est utile pour les tests unitaires : 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!