Расширение двух классов Java без композиции

#java #inheritance #extend

#java #наследование #расширить

Вопрос:

У меня есть два класса конфигурации: MainConfiguration и Configuration каждый с несколькими полями.

 class MainConfiguration {
    public String a;
    public String b;
    public String c;
    // ...
}
 
 class Configuration {
    public String d;
    public String e;
    public String f;
    // ...
}
 

Цель состоит в том, чтобы иметь возможность использовать MainConfiguration , и MainConfiguration Configuration как два независимых класса. Предположим, что я также не могу:

  • Используйте композицию / внедрение зависимостей
  • Внесите изменения в класс конфигурации

Например, я мог бы сделать

 class NewConfiguration extends Configuration {
    // copy fields from MainConfiguration
    public String a;
    public String b;
    public String c;
    // ...
}
 

но это привело бы к репликации полей из MainConfiguration . Каков был бы самый чистый способ достижения этой цели?

Комментарии:

1. В чем причина отказа от композиции в вашем случае?

2. Класс конфигурации распространяется на платформу приложения, которая ожидает, что содержимое будет доступно на первом уровне класса. Например, новый Class.getD() не новый Class.configuration().getD()

3. Нет проблем, если ваша платформа полагается на get-методы: объявите два поля для каждого типа конфигурации и объявите шесть методов get для получения полей из их соответствующих резервных полей.

4. Я уже попробовал это сделать. Спасибо!

5. Оказывается, поля сериализуются / десериализуются с использованием аннотаций @JsonProperty внутри класса, что делает композицию невозможной.