Java でのクロージャの一般的な使用例は次のとおりです。 イベント ハンドラを定義して、イベント ハンドラを含むメソッドのスコープ内の変数にアクセスできるようにするために使用されます。変数にアクセスして変更するメソッドを提供することで、オブジェクトのライフサイクル外の状態を管理するために使用されます。最初に必要になるまでオブジェクトの初期化を遅らせるために使用されます。テストの柔軟性を高めるために、テスト内の外部依存関係を模擬するために使用されます。また、コンテキスト情報の保存、さまざまな動作を持つコールバックの作成、シングルトン パターンの実装、メソッド呼び出しのシミュレートなどにも使用できます。
Java でクロージャを使用する一般的な使用例
クロージャは、外部スコープ変数にアクセスできる関数です。定義の範囲外でも同じことが当てはまります。 Java では、クロージャは匿名の内部クラス (匿名クラス) です。
Java でクロージャを使用する一般的な使用例をいくつか示します。
イベント ハンドラ
クロージャは、イベント ハンドラの定義によく使用されます。それらを含むメソッドのスコープにアクセスできます。例:
JButton button = new JButton("Click me"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 可以访问包含这个闭包的方法的作用域中的变量 System.out.println("Button clicked!"); } });
状態管理
クロージャを使用して、オブジェクトのライフサイクル外の状態を管理できます。たとえば、次のクロージャは整数を保持し、それにアクセスするためのメソッドを提供します。
public class StateManager { private int state; public IntSupplier getStateSupplier() { return () -> state; } public Consumer<Integer> setStateConsumer() { return (newState) -> state = newState; } }
遅延初期化
クロージャは、オブジェクトの初期化を遅らせるために使用できます。一度必要になるまで。たとえば、次のクロージャは、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; } }
Test
クロージャを使用してテスト内の外部依存関係を模擬することができるため、テストの柔軟性が向上します。たとえば、次のクロージャは、常に true
を返す save()
メソッドを模擬しており、単体テストに役立ちます。
public class MockDataStore { public Supplier<Boolean> getSaveSuppler() { return () -> true; } }
その他の使用例
以上がJava でクロージャを使用する一般的な使用例は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。