Почему этот класс не сериализуем? - PullRequest
0 голосов
/ 17 декабря 2009

Я использовал реализацию Mersenne-Twister в http://www.math.sci.hiroshima -u.ac.jp / ~ m-mat / MT / VERSIONS / JAVA / MTRandom.java в качестве замены для вставки по умолчанию java.util.Random класс. Однако четыре поля (int, логическое значение и два байта []) помечены как transient. Это означает, что я не могу сериализовать объект этого класса без реализации пользовательских функций.

Вопрос в том, есть ли причина, по которой эти поля помечены как временные? Есть ли там какой-нибудь код, содержащий информацию, которая не будет иметь никакого смысла, когда объект считывается из файла? Я удалил модификатор transient из полей, и он, кажется, работает нормально, но я не тестировал его интенсивно, и поэтому могут быть случаи, когда он ломается?

Лично я не понимаю, почему, поскольку все, что делается в классе, является арифметическим.

Ответы [ 2 ]

2 голосов
/ 17 декабря 2009

Из комментария к serialVersionUID похоже, что автор не хотел рассматривать сериализацию. Добавление transient могло бы подавить некоторые предупреждения компилятора / IDE.

0 голосов
/ 17 декабря 2009

Скорее всего, причина создания всех нестатических полей класса transient заключалась в том, что класс MTRandom остается двоичным, совместимым с java.util.Random, из которого он расширен.

Теоретически, вы можете сериализовать экземпляр MTRandom и десериализовать его как экземпляр Random, и все будет работать.

Если эти поля не transient, они будут сериализованы и станут несовместимыми.

Однако, насколько я могу судить, удаление переходных процессов не должно вызывать у вас проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...