Есть некий интерфейс 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 теперь не зависит ни от каких делегатов и может быть реализован автономно
Комментариев нет:
Отправить комментарий