Finale transiente Felder und Serialisierung

Ist es möglich, @ zu habfinal transient -Felder, die nach der Serialisierung in Java auf einen anderen als den Standardwert gesetzt werden? Mein Usecase ist eine Cache-Variable - deshalb ist estransient. Ich habe auch die Angewohnheit, @ zu machMap Felder, die nicht geändert werden (d. h. der Inhalt der Karte wird geändert, das Objekt selbst bleibt jedoch gleich)final. Diese Attribute scheinen jedoch widersprüchlich zu sein - während der Compiler eine solche Kombination zulässt, kann ich das Feld nur auf @ setzenull Nach der Unserialisierung.

Ich habe Folgendes ohne Erfolg versucht:

Einfache Feldinitialisierung (im Beispiel gezeigt): Dies ist, was ich normalerweise mache, aber die Initialisierung scheint nicht nach der Unserialisierung zu erfolgen;initialization in constructor (ich glaube, das ist semantisch das gleiche wie oben);zuweisung des feldes inreadObject() - kann nicht gemacht werden, da das Feld @ ifinal.

Im Beispielcache istpublic nur zum Testen.

import java.io.*;
import java.util.*;

public class test
{
    public static void main (String[] args) throws Exception
    {
        X  x = new X ();
        System.out.println (x + " " + x.cache);

        ByteArrayOutputStream  buffer = new ByteArrayOutputStream ();
        new ObjectOutputStream (buffer).writeObject (x);
        x = (X) new ObjectInputStream (new ByteArrayInputStream (buffer.toByteArray ())).readObject ();
        System.out.println (x + " " + x.cache);
    }

    public static class X implements Serializable
    {
        public final transient Map <Object, Object>  cache = new HashMap <Object, Object> ();
    }
}

Ausgabe

test$X@1a46e30 {}
test$X@190d11 null

Antworten auf die Frage(10)

Ihre Antwort auf die Frage