Maison >Java >javaDidacticiel >Comment puis-je sérialiser une expression Lambda en Java sans créer d'interface factice ?

Comment puis-je sérialiser une expression Lambda en Java sans créer d'interface factice ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 09:13:11811parcourir

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

Sérialisation d'un Lambda : une solution sans interfaces factices

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn