Java Serializable: должен ли E быть сериализуемым в ArrayList?
У меня есть следующий класс, содержащий поля, указанные ниже. Мой вопрос заключается в том, должны ли Admin, Worker и все мои другие самостоятельные классы реализовывать Сериализуемость, чтобы MyClass был Сериализуемым?
public class MyClass implements java.io.Serializable {
private static final long serialVersionUID = 1L;
ArrayList<Admin> admins;
ArrayList<Worker> workers;
ArrayList<Manager> managers;
ArrayList<Secretary> secretaries;
ArrayList<Category> categories;
HashMap<Issue, HashMap<Category,Manager>> ManagedIssues;
private static MyClass instance;
...
}
5 ответов:
Мой вопрос заключается в том, должны ли Admin, Worker и все мои другие самостоятельные классы реализовывать Сериализуемость для того, чтобы MyClass был Сериализуемым?
Да. Они должны быть такими.
ArrayList
по умолчанию is уже реализует интерфейсSerializable
. Но вам нужно реализовать сериализуемый интерфейс для типов, которые вы используете.Сериализуемость класса обеспечивается классом, реализующим
java.io.Serializable interface
. Классы, которые не реализуют этот интерфейс, не будут иметь ни одного из их состояние сериализовано или десериализовано. Все подтипы сериализуемого класса сами сериализуемы.
Как утверждали другие, если класс помечен
Но и в этом случае вам действительно нужно убедиться, что вы ограничиваете изменчивость внутреннего состояния. Другими словами, принимая изменяемый объект (например,Serializable
, то все внутри должно быть помеченоSerializable
тоже.ArrayList
) в (конструктор или сеттер) или возвращая его (в геттер), сделайте копии для защиты внутреннего состоянияMyClass
. Это всегда хорошая практика, но особенно сSerializable
.