Меня попросили создать решение для следующего утверждения.
"1) Сервис diff, который: • может вычислять различия между двумя объектами и возвращать полученное значение« diff »• может применять ранее созданный« diff »к исходному объекту, чтобы возвращаемый объект соответствовализмененный объект, который использовался для вычисления различий. "
Это было бы очень сложно без использования отражения.Используя отражение, я мог бы перечислить все элементы, свойства и методы класса неизвестного объекта.Я мог бы использовать их, чтобы получить значения, содержащиеся в объекте.Я мог бы сравнить исходные и измененные значения объектов, создать объект «diff», отражающий изменения между двумя объектами.
Используя отражение Java, я мог затем прочитать инструкции в объекте «diff» и применить их к исходному объекту.Отражение Java дало мне инструменты, необходимые для изменения значений неизвестных свойств исходного объекта.Я мог бы вызывать методы установки и создавать экземпляры типов, где это необходимо, если исходное свойство было нулевым, чтобы установить измененное значение для исходного объекта.
Приложение "diff" работает с любыми двумя объектами одного типа, но они могут быть любого типа, просто оба объекта должны быть одного типа.
Отражение очень мощно и позволяет нам создавать истинные универсальные полиморфные методы, функции, библиотеки и системы, в которых тип передаваемого объекта не требуется знать во время компиляции.Это применяется при совместном использовании Java Reflection и Generics, очень мощная комбинация.
В завершение я также использовал Java Reflection для создания универсальной функции сортировки, которая могла бы сортировать любой список любого типа класса, используя любое свойство класса в качестве ключа сортировки. Пока вызывается методПередав список и имя свойства для использования, метод вернет отсортированный список.