Утилита для копирования именованного набора свойств компонента Java из одного компонента в другой компонент потенциально другого типа - PullRequest
0 голосов
/ 10 марта 2020

Я подозреваю, что получу кучу ответов о том, что на этот вопрос уже дан ответ. Возможно, это так, но все, что я нашел, - это ответы на ПОХОЖИЕ вопросы, но не этот точный набор требований.

  1. Я хочу скопировать указанный c набор свойств из одного компонента в другой.
  2. Я НЕ обязательно копирую ВСЕ свойства (также как различные BeanUtils или Dozer)
  3. Я хочу, чтобы спецификация свойств была автоматически изменяемой с помощью IDE
*. 1010 * Кто-нибудь нашел библиотечную утилиту, которая делает это?

Обычный способ сделать это - что-то вроде этого

Type bean1, bean2;

bean1.setProperty1(bean2.getproperty1())
bean1.setProperty2(bean2.getproperty2())
bean1.setProperty3(bean2.getproperty3())

Это, конечно, не ужасно, но его нелегко читать. Я хотел бы знать, есть ли фреймворк, который использует подход, основанный на данных, несколько более похожий на этот:

        CopyUtil.copyBeanProperties(
            bean1, bean2,
            Type::getProperty1,
            Type::getProperty2,
            Type::getProperty3);

Это использует Java 8 ссылок на методы (как лямбды). Для меня это обеспечивает лучшую экспозицию, чем использование сеттеров / геттеров.

Также обратите внимание, что можно представить существование передачи свойств в виде строковых имен,

        CopyUtil.copyBeanProperties(
            bean1, bean2,
            "property1", "property2", property3)

Но это ставит под сомнение требование автоматического рефакторинга: ссылки на методы распознаются IDE - это ссылки на методы, но строки, содержимое которых совпадает с именем, обычно не являются. (То есть вы можете выполнить операцию замены строки, но это НЕ "безопасная" Java операция рефакторинга.)

...