Это будет зависеть от самого инструмента. serialVersionUID
предназначен для использования встроенным сериализатором Java (ObjectOutputStream
), который, насколько я могу судить по чтению источника Гессиана, не используется Hessian.
Для Гесса конкретно, лучший источник я могу найти который упоминает эти виды изменений this email:
По крайней мере, для Гесса, то лучше думать о версионности как набор типов изменений, которые могут обрабатываться.
В частности, Hessian может управлять следующими видами изменений: 1) , если вы добавите или опустите поле, сторона, которая не понимает поле , будет игнорировать его. 2) возможны некоторые изменения типа поля, если Hessian может преобразовать (например, int to long) 3) существует некоторая гибкость на карте (bean), в зависимости от того, сколько информации Hessian имеет (что является основанием для предпочтения конкретных типов .)
Таким образом, если отправитель отправляет нетипизированную карту {"field1", 10}, а цель известна как MyValue {int field1; }, то Гессиан может отобразить поля .
Но он не может управлять такими вещами, как: 1) изменение имени поля (данные будут удалены). 2) изменение имени класса, где цель недоопределена, например поле объекта1. Если вы отправите MyValue2 в качестве нового поля 1, когда предыдущая версия была MyValue1, Hessian не может сделать , что автоматический переход. (Но, как и в случае с № 3 выше, поле «MyValue2 field1» предоставит достаточно информации для Hessian.) 3) класс разделяет, например. создавая подкласс и вставляя в него некоторые поля.
4) карту в список или список для изменения карты.
В принципе, я не думаю, что Гессиан намерен поддерживать неизвестные типы на картах.
Я попробую еще раз, обнаружим, что hessian преобразует неизвестный тип в 'Hashmap', не бросая исключений. Но для 'Class' instance, 'Class' является широко известным типом, поэтому он начинает преобразовывать и выдает' ClassNotFoundException', так как 'T' неизвестно. –
Anderson