Я использую маленький кусочек xstream для сериализации.
У меня есть следующий класс:
// version 0
class A {
}
// version 1
class A {
Object o = new Object();
}
Чтобы прочитать XML-файл версии 0 для создания класса А версии 1, мне потребуется добавить следующий метод в класс А версии 1:
class A {
private Object readResolve()
{
/* For backward compatible */
if (o == null) { o = new Object(); }
}
Object o = new Object();
}
Пока все отлично.
Теперь ситуация меняется на противоположную.
У меня есть следующий класс:
// version 0
class A {
Object o = new Object();
}
// version 1
class A {
}
Как я могу сделать чтение XML-файла версии 0, чтобы построить класс A версии 1?
Вот исключение, которое вы получите, если попытаетесь это сделать:
run:
com.thoughtworks.xstream.converters.ConversionException: a : a
---- Debugging information ----
message : a : a
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : a : a
class : javaapplication15.Main$A
required-type : javaapplication15.Main$A
path : /javaapplication15.Main$A/a
line number : 2
-------------------------------
null
BUILD SUCCESSFUL (total time: 2 seconds)