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.