Я подозреваю, что получу кучу ответов о том, что на этот вопрос уже дан ответ. Возможно, это так, но все, что я нашел, - это ответы на ПОХОЖИЕ вопросы, но не этот точный набор требований.
- Я хочу скопировать указанный c набор свойств из одного компонента в другой.
- Я НЕ обязательно копирую ВСЕ свойства (также как различные BeanUtils или Dozer)
- Я хочу, чтобы спецификация свойств была автоматически изменяемой с помощью 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 операция рефакторинга.)