Страницы

Поиск по вопросам

среда, 17 июля 2019 г.

Делегирование реализации интерфейсов

Есть некий интерфейс A и есть его наследник интерфейс B. У меня есть объект интерфейса A мне нужно создать класс, реализующий интерфейс B
Вопрос, кроме прямого объявления всех методов из A и вызова соответствующих методов у объекта нет другого способа реализации?
interface A { void SomeMethod1(...); int SomeMethod2(...); ........ }
interface B extends A { ........ }
class MyClass implements B { private A obj; void SomeMethod1(...) { obj.SomeMethod1(...); }
int SomeMethod2(...) { return obj.SomeMethod2(...); } ........ }
Класс, реализующий A неизвестен и недоступен. Так, что отнаследоваться не получится.


Ответ

Вдохновленный советом @ЮрийСПБ, Сделал так:
Объявил интерфейс
interface DelegateA extends A { A getObj();
@Override default void SomeMethod1(...) { getObj().SomeMethod1(...); }
@Override default int SomeMethod2(...) { return getObj().SomeMethod2(...); } ............ } Объявил интерфейс B
interface B extends A { ........ } Сделал реализацию
class MyClass implements B, DelegateA { private A obj;
@Override A getObj() { return obj; } }
Этот способ мне нравится больше, чем предложенный Юрием, т.к. интерфейс B теперь не зависит ни от каких делегатов и может быть реализован автономно

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

Отправить комментарий