Как сериализировать статические элементы данных класса Java?

Спросите своего администратора базы данных об аудите. Он может начать аудит с помощью простой команды, например:

AUDIT INSERT ON user.table

Затем вы можете запросить таблицу USER_AUDIT_OBJECT, чтобы определить, была ли вставка в вашу таблицу с момента последнего экспорта.

Google для Oracle аудита для получения дополнительной информации ...

32
задан Carl Manaster 17 June 2009 в 16:18
поделиться

6 ответов

The first question is why you need to serialize the static members?

Static members are associated with the class, not the instances, so it does not make sense to include them when serializing an instance.

The first solution is to make those members not static. Or, if those members are the same in the original class and the target class (same class, but possibly different runtime environments), don't serialize them at all.

I have a few thoughts on how one could send across static members, but I first need to see the use case, as in all cases that means updating the target class, and I haven't found a good reason to do so.

18
ответ дан 27 November 2019 в 20:56
поделиться

Ребята, статичность не означает НЕПРЕРЫВНЫЙ. Например, я могу захотеть сериализовать все состояние вычислений (да, включая статические поля - счетчики и т. Д.), Чтобы возобновить их позже, после перезапуска JVM и / или хост-компьютера.

Правильный ответ на это, как уже было сказано, - использовать интерфейс Externalizable, а не Serializable. Тогда у вас будет полный контроль над тем, что и как вы экстернализируете.

16
ответ дан 27 November 2019 в 20:56
поделиться

Static members belong to the class, not to the individual objects.

You should reconsider your data structure.

1
ответ дан 27 November 2019 в 20:56
поделиться

Хорошие ответы и комментарии - не делайте этого. Но как?

Скорее всего, вам лучше создать объект, в котором будет храниться вся ваша «Статика». Этот объект, вероятно, также должен иметь какие-либо статические методы из вашего класса.

Каждый экземпляр вашего класса может содержать этот другой класс - или, если вам действительно нужно, вы можете сделать его синглтоном, к которому может получить доступ любой член.

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

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

2
ответ дан 27 November 2019 в 20:56
поделиться

Да, мы можем сериализовать статические переменные. Но мы можем написать наши собственные writeObject() и readObject(). Думаю, это может решить проблему.

.
0
ответ дан 27 November 2019 в 20:56
поделиться
Другие вопросы по тегам:

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