Сохраните «состояние» используемого объекта для дальнейшего сравнения (без сериализации) - PullRequest
0 голосов
/ 19 ноября 2018
    GenericObject MyObj = new GenericObject();

    MyObjs.add(); // operation 1

    // operation for saving the current state of "MyObj"

    MyObjs.add(); // operation 2 (it is the same as 1, repeated)

    // Comparison with previous saved state of "MyObj" -> this will return **false**

    MyObjs.remove(); // operation 3 (this operation cancel the effect of operation 2)

    // Comparison with previous saved state of "MyObj" -> this will return **true**

Я бы сохранил «состояние» объекта, то есть переменные, когда я каким-то образом сохраняю его состояние и после его использования для сравнения будущих состояний объекта.

С сериализацией я мог бы сериализовать каждый раз объект, а затем десериализовать и сравнивать, но я не могу использовать сериализацию. Как это возможно со стандартными библиотеками?

1 Ответ

0 голосов
/ 19 ноября 2018

Вы можете использовать библиотеку Jackson-JSON, чтобы вывести состояние объекта в формате json без реализации интерфейса сериализации в вашем классе и снова загрузить объект, прочитав эти данные json и сопоставив его с типом объекта.

Просто используйте ObjectMapper для этой цели.

Пример:

//do some stuff here with your MyObj object

ObjectMapper mapper = new ObjectMapper();
String jsonState1 = mapper.writeValueAsString(MyObj);

//do some stuff here

String jsonState2 = mapper.writeValueAsString(MyObj);

Если вы хотите сравнить любой из них, вы можете просто сделать:

GenericObject objState1 = mapper.readValue(jsonState1, GenericObject.class);

Тогда сделайте любое сравнение, которое хотите.

Надеюсь, это поможет !!

Обновление

Если вы хотите использовать только стандартную библиотеку Java, у вас нет других выбор, чем использование Java Reflection API. С помощью этого API вы можете получить доступ переменные класса и их методы получения и установки, на самом деле все, что держит класс. Но, к сожалению, вам нужно написать целое куча кодов для этого. Но это единственный выбор, если вы этого не сделаете хочу использовать сериализацию Java.

...