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
Libérer: 2024-12-07 09:13:11
original
750 Les gens l'ont consulté

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();
    }
}
Copier après la connexion

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!");
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal