Расширить класс, а также реализовать интерфейс - PullRequest
0 голосов
/ 18 января 2020

Есть ли основания для расширения класса с помощью абстрактного класса, а также для реализации интерфейса?

В большинстве случаев это похоже на хак, а не на solid выбор дизайна.

Например, у меня есть класс настроек, например:

public abstract class exampleAbstractSettings {
    private String ID = "ID-";
    private String channel;
    private HashMap<String, String> channelToKeyMap;
    private String address;
}

Реализация интерфейса, подобного следующему:

public interface exampleSettingsInterface {
    String getType();
}

В классе, как:

public class exampleSettings extends exampleAbstractSettings implements exampleSettingsInterface {
    private boolean enabled = false;
    private int dataRate = 102000;
    private String type = SERIAL;
    private String address = "ttyAMA0";
}

Это просто хак, чтобы добавить новое поле, не испортив JSON objectMapper. Для этого вы можете использовать аннотацию @JsonIgnore.

Затем интерфейс использовался так:

(exampleSettingsInterface)objectOfExampleAbstractSettings.getType()
...