Сериализация наследуемого класса

304
17 августа 2017, 20:52

Есть иерархия классов указанная ниже, для сериализации хватит ли имплиментировать Serializable только классу A, для сериализации классов типа C?

class A {
}
class B extends A{
}
class C extends B{
}
Answer 1

Простой ответ: да, интерфейсы в Java наследуются.

Об этом, в частности, явно написано в документации Serializable:

All subtypes of a serializable class are themselves serializable.

Все наследники сериализуемого класса сериализуемы.

При этом надо иметь ввиду, что Serializable — интерфейс, который используется только чтобы отмечать классы, поддерживающие сериализацию. Класс, который отмечен как Serializable может содержать поля, сериализация которых невозможна.

class A implements Serializable {
}
//Класс В унаследовал интерфейс
class B extends A {
     //но содержит поля, которые не сериализуются
     Scanner scanner;
}

Дополнение по несериализуемым полям: При обнаружении несериализуемых полей при сериализации будет выброшено NotSerializableException. Это можно обойти несколькими способами, описанными в документации к Serializable, например в примере выше:

  • объявить scanner как transient;
  • переопределить методы сериализации;

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

READ ALSO
Как сделать жадную выборку в Spring data?

Как сделать жадную выборку в Spring data?

Есть 2 сущьности User и RoleМне нужно сделать выборку User что бы Role которая у User на полях тоже инициализировалась

407
Hibernate mapping конструкции List<Map<String, String>> list

Hibernate mapping конструкции List<Map<String, String>> list

Как замаппить конструкцию вида List<Map<String, String>> list, используя XML mapping Hibernate?

244
Java - чистый код на примере простого цикла

Java - чистый код на примере простого цикла

Сразу скажу - в java начинающий, как сделать цикл более "грамотным" и "логичным"?

274
Вывод более глубоких элементов в ArrayList

Вывод более глубоких элементов в ArrayList

Как получить(либо вывести в консоль) более глубокое значение ArrayList, например значение testVal из ArrayList-a parserJson, если он всегда имеет динамическую...

241