Есть некий интерфейс
interface IIfaceClass {
int firstMethodFromInterface();
int secondMethodFromInterface();
/*
.....
*/
int nthMethodFromInterface();
}
Есть переменная IIfaceClass icObj; содержащая экземпляр какого-то (естественно - заранее неизвестно какого) класса, реализующего этот интерфейс. Нужно переопределить реализацию firstMethodFromInterface для данного конкретного экземпляра/его копии.
Есть ли способ более элегантный чем сделать обертку вроде
class HookClass implements IIfaceClass {
final private IIfaceClass originalObject;
public HookClass(IIfaceClass originalObject) {
this.originalObject = originalObject;
}
@Override
public int firstMethodFromInterface() {
// изменяем логику работы
return 100 + originalObject.firstMethodFromInterface();
}
@Override
public int secondMethodFromInterface() {
// остальные методы вызываем as-is
return originalObject.secondMethodFromInterface();
}
/*
.....
*/
@Override
public int nthMethodFromInterface() {
// остальные методы вызываем as-is
return originalObject.nthMethodFromInterface();
}
}
ну и дальше icObj = new HookClass(icObj);
?