campos transitórios finais e serialização

É possível terfinal transient campos definidos para qualquer valor não padrão após a serialização em Java? Meu caso de usuário é uma variável de cache - é por isso quetransient. Eu também tenho o hábito de fazerMap campos que não serão alterados (ou seja, o conteúdo do mapa é alterado, mas o próprio objeto permanece o mesmo)final. No entanto, esses atributos parecem contraditórios - enquanto o compilador permite essa combinação, não posso ter o campo definido para nada além denull após desserialização.

Eu tentei o seguinte, sem sucesso:

inicialização de campo simples (mostrada no exemplo): é o que eu normalmente faço, mas a inicialização não parece ocorrer após a desserialização;inicialização no construtor (acredito que isto é semanticamente o mesmo que acima);atribuindo o campo emreadObject() - não pode ser feito, pois o campo éfinal.

No exemplocache épublic somente para teste.

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> ();
    }
}

Resultado:

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

questionAnswers(5)

yourAnswerToTheQuestion