Предположим, у вас есть несколько типов, каждый из которых представляет набор полей. Поля каждого типа разные, но некоторые типы имеют общие поля.
Рассмотрим типы IceCream. Все типы IceCream реализуют общий интерфейс, который требует наличия метода getFlavor(). Однако каждый тип IceCream также предоставляет несколько других методов. Типы IceCream включают такие вещи, как Gelato, WaterIce, FrozenCustard, ChilledCream и традиционный.
Некоторые типы IceCream предоставляют метод для получения производителя, но другие типы IceCream не имеют производителя и, следовательно, не предоставляют метод для получения производителя.
Кроме того, типы IceCream по-разному раскрывают метод getManufacturer() — одни называют его getManufacturer(), а другие — getMaker(), getChef() или getOwner(). Кроме того, один тип IceCream может иметь несколько отдельных методов, каждый из которых возвращает одних и тех же (или разных) производителей.
Учитывая некоторый набор типов IceCream, некоторые из которых имеют методы, возвращающие производителя (производитель всегда будет одним и тем же типом данных), как можно абстрагироваться от этих типов IceCream, чтобы они могли написать общую логику для работы с типами IceCream вместо дублирования всех кода, который используется для получения производителя для каждого типа IceCream отдельно?
К сожалению, эти классы не могут быть изменены.
Похоже, что для этого потребуется какое-то перечисление, содержащее отображение из Type -> String, а строки используются для рефлексивного разрешения методов класса. Есть ли другой общий способ реализовать это?