2010-12-30 11 views
39

Я только что узнал на Java, что вы можете объявить поле «static transient» - компилятор не жалуется. Это никоим образом не полезно, поскольку статические поля не сериализуются, как мы все знаем.Java: статические поля переходных процессов

Но мне интересно, есть ли на самом деле случай, когда поля «статические переходные» полезны?

+30

Статические поля переходного процесса могут быть обнаружены с помощью отражения. Вы можете написать свой собственный сериализатор для работы с XML, JSon и т. Д., И вы можете придать этому особое значение, если вы намерены также сохранить статические переменные. –

+0

+1 для получения прецедента. Я понимаю, что это излишнее. – Nishant

+3

BTW: Вы можете использовать другие комбинации модификаторов, которые не имеют такого же смысла, как открытый конструктор абстрактного класса или защищенного конструктора/метода конечного класса. –

ответ

15

Нет, вы сами это сказали, статические поля не сериализованы.

Приятно, что компилятор позволяет это сделать.

+19

Они не сериализованы встроенным Java-сериализатором. Однако другие сериализаторы могут вести себя по-разному. –

+3

И даже с помощью другого сериализатора точка сохранения статических полей ...? –

+4

@Peter, кстати serialVersionUID будет исключением. –

7

В большинстве случаев это не полезно. Статические поля действительно не сериализованы сериализатором по умолчанию.

Однако statictransient Поля могут быть обнаружены с помощью отражения. Если кто-то пишет собственный сериализатор, и он хочет также сериализовать статические поля, то он может взять ключевое слово transient и пропустить сериализацию этого конкретного поля.

PS: Этот ответ опубликован для полноты и основан на Peter Lawrey's comment. Кредиты ему.

Смежные вопросы