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
Barbara Streisandasal
2024-12-07 09:13:11751semak imbas

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();
    }
}

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!");

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!

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