Поле SerialVersionUID для статических конечных переменных - PullRequest
0 голосов
/ 26 марта 2012

Для преобразования целого числа в enum (из файла json) я объявил несколько HashMaps следующим образом:

final static HashMap<Integer, Types> getType = new HashMap<Integer, Types>() {
    {
        put(1, Types.TYPE1);
        put(2, Types.TYPE2);
        ....
    }
};

Теперь затмение дает мне следующее предупреждение:

The serializable class  does not declare a static final serialVersionUID field of type long

Я уже нашел довольно хорошее объяснение сообщения об ошибке здесь . Однако я не знаю, как это с GWT. Использует ли GWT SerialVersionUID где-нибудь или он фактически удаляется компилятором closur? Насколько я понимаю, это не нужно.

1 Ответ

1 голос
/ 26 марта 2012

serialVersionUID используется только для сериализации Java (с использованием контракта JVM Serializable), что (вполне очевидно) не поддерживается в GWT.

Это означает, что вы можете спокойно игнорировать предупреждение;и вы также можете безопасно добавить serialVersionUID для успокоения Eclipse, так как он будет удален компилятором.
(я полагаю, вы также можете настроить Eclipse, чтобы он не генерировал предупреждение)

Кроме того, вы не должны инициализировать свой HashMap таким образом (то есть создать анонимный подкласс HashMap, который инициализирует себя в своем инициализаторе).Вам лучше использовать статический инициализатор:

final static Map<Integer, Types> getType;
static {
   getType = new HashMap<Integer, types>();
   getType.put(1, Types.TYPE1);
   getType.put(2, Types.TYPE2);
   ...
   // you could even use Collections.unmodifiableMap here
}

или использовать Gumm's ImmutableMap : окончательная статическая карта getType = ImmutableMap.builder () .put (1, Types.TYPE1) .put(1, Types.TYPE2) ... .build ();

Еще лучше, если ваши целочисленные значения отображаются в порядке объявления констант перечисления, вы можете просто использовать Enum # values ​​() вместо map:

Types typeFromInt(int i) {
   return Types.values()[i];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...