Я прошел по этому маршруту один раз. Это сработало, но после того, как решило, что оно того не стоит.
Вы можете определить базовый класс MyBean или что-то еще, и у него есть собственный метод mergeSettings. Каждый класс, который вы хотите использовать, может расширить MyBean и предоставить собственную реализацию для mergeSettings, которая вызывает суперклассы mergeSettings. Таким образом, общие поля могут быть в суперклассе. Если вы хотите стать по-настоящему модным, вы можете определить интерфейс и абстрагировать класс, чтобы он был действительно красивым. И пока вы на это, может быть, вы могли бы использовать отражение. в любом случае, mergeSettings получит карту, ключом которой является имя свойства. Каждый класс имеет свои константы, связанные с ключами.
class MyBean extends AbstractMyBean ... {
public static final String FIELD1 = 'field1'
private String field1
public mergeSettings(Map<String, Object> incoming) {
this.field1 = incoming.get(FIELD1);
// and so on, also do validation here....maybe put it on the abstract class
}
}
Хотя для сеттеров очень много работы ...