Rumah  >  Artikel  >  Java  >  Adakah fungsi Java menyokong penutupan? Bagaimana untuk melaksanakan penutupan?

Adakah fungsi Java menyokong penutupan? Bagaimana untuk melaksanakan penutupan?

PHPz
PHPzasal
2024-05-02 13:36:02949semak imbas

Java tidak menyokong penutupan sebenar, tetapi ia boleh disimulasikan melalui kelas dalaman tanpa nama. Penutupan dalam kelas dalaman tanpa nama boleh mengakses pembolehubah luaran walaupun fungsi yang menciptanya telah keluar, tetapi pembolehubah luaran tidak boleh diisytiharkan atau diubah suai di luar fungsi dan ungkapan lambda tidak boleh menangkap pembolehubah luaran secara langsung.

Java 函数是否支持闭包?如何实现闭包?

Penutupan dalam Fungsi Java

Pengenalan kepada Penutupan

Penutupan ialah fungsi yang mempunyai akses kepada pembolehubah yang ditakrifkan dalam fungsi yang menciptanya. Penutupan masih boleh mengakses pembolehubah ini walaupun fungsi yang menciptanya telah selesai dilaksanakan.

Melaksanakan penutupan di Java

Java tidak menyokong penutupan sebenar. Walau bagaimanapun, dengan menggunakan kelas dalaman tanpa nama kita boleh mensimulasikan tingkah laku penutupan.

Kes Praktikal

Pertimbangkan coretan kod berikut:

public class LambdaClosure {

    public static void main(String[] args) {
        int x = 10;
        Runnable closure = () -> System.out.println(x);
        
        // 调用闭包
        closure.run();
    }
}

Dalam kes ini:

  • x ialah pembolehubah setempat, yang ditakrifkan dalam main() tengah kaedah. x 是一个局部变量,它被定义在 main() 方法中。
  • 匿名内部类 Runnable 被用来创建闭包。
  • 闭包 closure 访问了外部变量 x,即使 main()
  • Kelas dalaman tanpa nama Boleh Dijalankan digunakan untuk membuat penutupan.

Penutupan closure mengakses pembolehubah luaran x walaupun kaedah main() telah keluar.

Kelebihan dan Had
  • Kelebihan penutupan mengejek termasuk:
  • Ia membenarkan akses kepada pembolehubah luaran apabila diperlukan.

Pembolehubah luaran boleh ditangkap dalam kelas dalaman tanpa nama.

  • Keterbatasan termasuk:
  • Pembolehubah luaran tidak boleh diisytiharkan atau diubah suai di luar fungsi.
🎜Ungkapan lambda tidak boleh menangkap pembolehubah luaran secara langsung dan kelas dalaman tanpa nama mesti digunakan. 🎜🎜

Atas ialah kandungan terperinci Adakah fungsi Java menyokong penutupan? Bagaimana untuk melaksanakan penutupan?. 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