Сериализация двойной инициализированной скобки Карта

это решило проблему для меня (у меня установлен php7):

sudo apt-get install libapache2-mod-php7.0

sudo service apache2 restart

0
задан andrew83 6 March 2019 в 07:05
поделиться

1 ответ

Второй не может быть сериализован (исключение NotSerializableException).

Это будет потому, что вы инициализируете свою карту нестатическим методом внутри несериализуемого класса.

Инициализация в двойных скобках - это просто определение анонимного класса с помощью инициализатора экземпляра. Анонимные классы в нестатических контекстах фиксируют ссылку на включающий экземпляр.

Если этот класс не сериализуем, вы не можете сериализовать свой экземпляр анонимного класса. Похоже, этот код находится внутри класса модульного теста; было бы очень необычно, чтобы такой класс был сериализуемым.

Самое простое решение, честно говоря, просто избежать двойной инициализации. Это синтаксическая выдумка, которая слишком умна для своего блага.

Однако, если вы действительно настаиваете на его использовании, вы можете просто выполнить инициализацию статическим методом.

static Map<String, Object> doubleBrace() {
  return new HashMap<String, Object>(){
    private static final long serialVersionUID = 1L;
    {
      put("test", "String");
    }};
}

Но это несколько противоречит краткости использования инициализации двойной скобки в первую очередь.

0
ответ дан Andy Turner 6 March 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: