Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mensiri Ungkapan Lambda di Java Tanpa Mencipta 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!