En programmation Java, il n'est pas rare de rencontrer des scénarios dans lesquels vous devez sérialiser des expressions lambda. Cependant, les tentatives de sérialisation directe d'un lambda aboutissent souvent à une NotSerializingException.
Considérez l'exemple suivant :
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(); } }
Dans ce cas, la sérialisation du lambda génère une NotSerializingException.
Pour surmonter ce défi, Java 8 introduit une solution intelligente : convertir un objet en une intersection de types. En ajoutant plusieurs limites au type du lambda, vous pouvez le rendre élégamment sérialisable :
Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");
Cette technique permet au lambda d'hériter automatiquement de l'interface Serialisable, lui permettant d'être sérialisé sans avoir besoin d'un "factice". Interface sérialisableRunnable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!