Я использую шаблон делегирования для обертывания объекта, созданного фабрикой в сторонней библиотеке. Недавно библиотека добавила защищенный метод в базовый класс, и мой класс-оболочка больше не работает. Кто-нибудь имеет хорошее решение, не прибегая к размышлениям?Java: шаблон делегирования и защищенные методы
Это в 3-й партии библиотеки и в их пакете,
public class Base {
public void foo();
protected void bar(); // Newly added
}
Это в моем собственном пакете,
public class MyWrapper extends Base {
private Base delegate;
public MyWrapper(Base delegate) {
this.delegate = delegate;
}
public void foo() {
delegate.foo()
}
protected void bar() {
// Don't know what to do
}
}
EDIT: Мой оригинальный пост не было ясно. Эти 2 класса находятся в разных пакетах.
Чтобы ответить на вопрос, почему мне нужна делегация. Это типичный пример использования шаблона Delegation/Wrapper, и я не могу показать его здесь в нескольких строках кода. Библиотека предоставляет базовый класс, но фактический объект с их фабрики является производным классом Base. Фактический класс изменяется в зависимости от конфигурации. Поэтому я не знаю, что такое делегат. Поэтому прямой шаблон наследования здесь не работает.
Ну, в чем же цель этого метода? Можете ли вы просто проигнорировать это? Думаю, нет, поскольку вы заявляете «больше не работает» ... можете ли вы назвать super.bar()? Просто выстрел в синий цвет ... У вас есть какой-либо документ по этому новому методу? – Fildor
Вы пытались переместить свой класс-оболочку в пакет с тем же именем/путем, что и у базового класса? это скорее взлом, чем решение, но методы 'protected' должны быть доступны в одном пакете. –
. Методы базового класса' 'foo()' и 'bar()' выглядят так, как будто «Base» были интерфейсом или абстрактным классом. Не могли бы вы указать свой вопрос? Каким образом вам нужно размышление? Поскольку он защищен, вам может не потребоваться его переопределение. –