Можем ли мы сериализовать статический внутренний класс в Java? Сам класс объявляется как статический.Сериализация статического внутреннего класса
ответ
Статический внутренний класс не отличается от класса верхнего уровня в этом отношении: он может быть сериализован, если объявлено реализовать Serializable
(или является подклассом класса, объявленного для реализации Serializable
). Кроме того, как и в классах верхнего уровня, все объекты, встречающиеся во время сериализации во время выполнения, должны быть сериализуемыми, чтобы избежать NotSerializableException
. Поскольку внутренний класс равен static
, природа внешнего класса не имеет к этому отношения.
Спасибо всем, ребята. Я получил то, что мне нужно от вас, людей. – Tinkerbel
Кажется, ответ может отличаться в зависимости от версии Java.
сериализация спецификация в JDK 7 говорит:
Примечания - Сериализация внутренних классов (то есть вложенные классы, которые не являются статическими классами членов), в то числе локальных и анонимных классов, настоятельно рекомендуется по нескольким причинам. Поскольку внутренние классы, объявленные в нестатических контекстах, содержат неявные непереходные ссылки на включение экземпляров класса, сериализация такого внутреннего экземпляра класса приведет к сериализации связанного с ним экземпляра внешнего класса. Синтетические поля, созданные javac (или другими компиляторами JavaTM) для реализации внутренних классов, зависят от реализации и могут различаться между компиляторами; различия в таких полях могут нарушить совместимость, а также привести к конфликтующим значениям serialVersionUID по умолчанию. Имена, назначенные локальным и анонимным внутренним классам, также зависят от реализации и могут различаться между компиляторами. Поскольку внутренние классы не могут объявлять статические члены, кроме полей постоянной времени компиляции, они не могут использовать механизм serialPersistentFields для обозначения сериализуемых полей. Наконец, поскольку внутренние классы, связанные с внешними экземплярами, не имеют конструкторов с нулевым аргументом (конструкторы таких внутренних классов неявно принимают включенный экземпляр в качестве предварительного параметра), они не могут реализовать Externalizable. Однако ни одна из перечисленных выше проблем не относится к статическим классам-членам.
и из опыта сериализации объектов между версиями Oracle и IBM JDK 1.7 могу сказать, что он не всегда работает. Я не могу сказать, что он всегда терпит неудачу, но вы не можете рассчитывать на то, что он работает.
Путь к коду, который не работает в моем приложении, отлично работал на JDK 1.5 в течение 5 лет в производстве, и я ничего не вижу в предыдущей документации по сериализации, напоминающей текущий оператор. Таким образом, кажется, что Java боги дают этот образец кода в JDK 7.
Это не относится к вопросу, который указывает ** статические ** внутренние классы. – gerardw
@Tinkerbel что-то отметить -
Сериализация статические вложенные классы это хорошо, но когда (в будущем) если статические внутренние классы когда-либо перемещается в другой внешний класс, тогда сериализация старых объектов является проблемой.
Все поля присваивают значение по умолчанию/null.
Будет полезно, если кто-нибудь сможет объяснить, почему?Я это заметил, но у меня нет очень убедительной причины ... Похоже, всякий раз, когда пакет меняется, это должно произойти – user2674407
- 1. Использование статического внутреннего класса
- 2. getFragmentManager() внутри статического внутреннего класса
- 3. Сериализации статического внутреннего класса FlexJSON
- 4. Смешивание внутреннего класса и статического вложенного класса
- 5. Memento pattern in Java - сериализация внутреннего класса
- 6. Создание внутреннего статического класса верхнего уровня
- 7. ява ошибки инициализации статического внутреннего класса
- 8. Как использовать псевдоним статического внутреннего члена класса?
- 9. Конструктор и объекты статического внутреннего класса
- 10. Объем статического внутреннего класса в java
- 11. Конструктор внутри внутреннего статического класса в java?
- 12. ошибка сборки при использовании статического внутреннего класса
- 13. Настройка текста текста из статического внутреннего класса
- 14. Мок поля внутреннего статического класса с EasyMock
- 15. Объем статического внутреннего класса в ASP.NET
- 16. Внутренний класс против статического внутреннего класса
- 17. Как издеваться над частным полем внутреннего статического класса класса
- 18. Наследование класса, построенного с использованием статического внутреннего класса Builder
- 19. Доступ к методу внешнего класса внутри статического внутреннего класса
- 20. Производительность GC для внутреннего класса против статического вложенного класса
- 21. Передача переменной от статического внутреннего класса до высшего класса
- 22. Python: Как получить переменные класса Outer из внутреннего статического класса?
- 23. Вызов статического метода внутреннего класса с объектом внешнего класса
- 24. Отношение внутреннего внутреннего класса
- 25. Дизайн класса C# без использования «внутреннего» или «статического»?
- 26. Как создать объект статического внутреннего класса в C#?
- 27. InstantiationException по вызову method.getReturnType() newInstance(), статический метод статического внутреннего класса
- 28. Как начать работу с использованием Intent внутри внутреннего статического класса?
- 29. Почему инициализация экземпляра и статического внутреннего класса различна?
- 30. Как получить класс внутреннего статического класса в другой сборке?
Хорошо, что происходит, когда вы ... попробуйте? –
мое приложение работает нормально, когда я это делаю. Но для этого я сериализую как внутренние, так и внешние классы, которые мне не нужны, но я знаю понятие, если внутренний класс сериализуется, а затем внешний должен быть сериализован. А также, у меня есть некоторые сомнения в статических классах, которые могут быть сериализованы или нет. – Tinkerbel
Внешний класс не имеет ничего общего с сериализацией внутреннего класса _static_. –