Rumah  >  Artikel  >  Java  >  Apakah kes penggunaan biasa untuk menggunakan penutupan dalam Java?

Apakah kes penggunaan biasa untuk menggunakan penutupan dalam Java?

王林
王林asal
2024-05-04 08:15:01498semak imbas

Kes penggunaan biasa untuk penutupan di Java termasuk: Untuk menentukan pengendali acara supaya mereka boleh mengakses pembolehubah dalam skop kaedah yang mengandunginya. Digunakan untuk mengurus keadaan di luar kitaran hayat objek dengan menyediakan kaedah untuk mengakses dan mengubah suai pembolehubah. Digunakan untuk melambatkan pengamulaan sesuatu objek sehingga ia pertama kali diperlukan. Digunakan untuk mengejek kebergantungan luaran dalam ujian untuk meningkatkan fleksibiliti ujian. Ia juga boleh digunakan untuk menyimpan maklumat konteks, membuat panggilan balik dengan gelagat berbeza, melaksanakan corak tunggal dan mensimulasikan panggilan kaedah, dsb.

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

Kes penggunaan biasa menggunakan penutupan dalam Java

Penutupan ialah fungsi yang mempunyai akses kepada pembolehubah skop luar, walaupun di luar skop penentunya. Di Jawa, penutupan ialah kelas dalaman tanpa nama (kelas tanpa nama).

Berikut ialah beberapa kes penggunaan biasa untuk menggunakan penutupan dalam Java:

Pengendali Acara

Penutupan sering digunakan untuk menentukan pengendali acara supaya mereka mempunyai akses kepada skop kaedah yang mengandunginya. Contohnya:

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

Pengurusan Negeri

Penutupan boleh digunakan untuk mengurus keadaan di luar kitaran hayat objek. Sebagai contoh, penutupan berikut akan memegang integer dan menyediakan kaedah untuk mengaksesnya:

public class StateManager {
    private int state;

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

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

Pengamatan malas

Penutupan boleh digunakan untuk menangguhkan pemulaan objek sehingga ia mula-mula diperlukan. Sebagai contoh, penutupan berikut hanya akan memulakan value kali pertama kaedah getValue() dipanggil: 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;
    }
}

Pengujian

Penutupan boleh digunakan dalam ujian Mock kebergantungan luaran untuk meningkatkan fleksibiliti ujian. Sebagai contoh, penutupan berikut mensimulasikan kaedah save() yang akan sentiasa mengembalikan true, yang berguna untuk ujian unit:
    rrreee
  • Kes penggunaan lain
  • Simpan maklumat kontekstual untuk kegunaan kemudian
  • Buat panggilan balik dengan gelagat berbeza
🎜Laksanakan corak tunggal 🎜🎜Panggilan kaedah olok-olok🎜🎜

Atas ialah kandungan terperinci Apakah kes penggunaan biasa untuk menggunakan penutupan dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn