Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mensiri Ungkapan Lambda di Java Tanpa Mencipta Antara Muka Dummy?

Bagaimanakah Saya Boleh Mensiri Ungkapan Lambda di Java Tanpa Mencipta Antara Muka Dummy?

Barbara Streisand
Lepaskan: 2024-12-07 09:13:11
asal
750 orang telah melayarinya

How Can I Serialize a Lambda Expression in Java Without Creating a Dummy Interface?

Mensiri Lambda: Penyelesaian Tanpa Antara Muka Dummy

Dalam pengaturcaraan Java, bukan sesuatu yang luar biasa untuk menghadapi senario di mana anda perlu mensiri ungkapan lambda. Walau bagaimanapun, percubaan untuk mensiri secara langsung lambda selalunya menghasilkan NotSerializableException.

Pertimbangkan contoh berikut:

public static void main(String[] args) throws Exception {
    File file = Files.createTempFile("lambda", "ser").toFile();
    try (ObjectOutput oo = new ObjectOutputStream(new FileOutputStream(file))) {
        Runnable r = () -> System.out.println("Can I be serialized?");
        oo.writeObject(r);
    }

    try (ObjectInput oi = new ObjectInputStream(new FileInputStream(file))) {
        Runnable r = (Runnable) oi.readObject();
        r.run();
    }
}
Salin selepas log masuk

Dalam kes ini, bersiri lambda melemparkan NotSerializableException.

Untuk mengatasi cabaran ini, Java 8 memperkenalkan penyelesaian yang bijak: menghantar objek ke persimpangan daripada jenis. Dengan menambahkan berbilang sempadan pada jenis lambda, anda boleh menjadikannya boleh bersiri dengan elegan:

Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");
Salin selepas log masuk

Teknik ini membolehkan lambda mewarisi antara muka Boleh Bersiri secara automatik, membolehkan ia bersiri tanpa memerlukan "dummy" Antara muka SerializableRunnable.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensiri Ungkapan Lambda di Java Tanpa Mencipta Antara Muka Dummy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan