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.
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 kaedahsave()
yang akan sentiasa mengembalikan true
, yang berguna untuk ujian unit: 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!