Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top