2010-09-17 6 views
0

У меня есть распределенная система с сериализуемым классом enum с константами, которые могут различаться в системе.Java-сериализация перечислений и valueOf

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

Я не верю, что valueOf может быть переопределен или другой пользовательский метод, вставленный перед вызовом valueOf во время десериализации.

Есть ли способ избежать этой проблемы с перечислениями?

+0

Я думаю, что не совсем понятно, что вы хотите сделать: хотите ли вы десериализовать заданное значение в сериализованном объекте на разные перечисления в зависимости от некоторых внешних обстоятельств? –

+0

Рассматривали ли вы добавление для этого настраиваемого статического метода? Вы делаете это звуком как проблема (или даже дефект) класса Enum, но это не так. Проблема заключается в непоследовательных константах. –

+0

Я ищу, чтобы предотвратить десериализацию от взрыва при вызове valueOf на несуществующей постоянной. – Dirk

ответ

5

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

Паллиатив будет заключаться в использовании метода readObject() в ваших чувствительных классах и сборе исключений для неправильных значений перечисления.

+0

Спасибо - я сейчас читаю readObject() - это вызвано до valueOf при десериализации? – Dirk

+0

Это метод, используемый для перезаписи способа десериализации вашего объекта. –

+0

Будет ли это проблемой? «Процесс, с помощью которого преобразуются переменные enum, не может быть настроен: любой объект writeObject класса, readObject ..., определенный типами перечислений, игнорируется при сериализации и десриализации». Http://download.oracle.com/javase/6/docs/ platform/serialization/spec/serial-arch.html – Dirk

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