конечные переходные поля и сериализация

Возможно ли иметьfinal transient поля, которые установлены в любое значение не по умолчанию после сериализации в Java? Мой случай использования - это переменная кеша, поэтомуtransient, У меня также есть привычка делатьMap поля, которые не будут изменены (т. е. содержимое карты изменилось, но сам объект остался прежним)final, Тем не менее, эти атрибуты кажутся противоречивыми - хотя компилятор допускает такую ​​комбинацию, я не могу установить в поле ничего, кромеnull после десериализации.

Я попробовал следующее, но безуспешно:

простая инициализация поля (показано в примере): это то, что я обычно делаю, но инициализация, кажется, не происходит после десериализации;инициализация в конструкторе (я думаю, что это семантически то же самое, что и выше);назначение поля вreadObject() - не может быть сделано, так как полеfinal.

В примереcache являетсяpublic только для тестирования.

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

Выход:

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

Ответы на вопрос(5)

Ваш ответ на вопрос