Answer the question
In order to leave comments, you need to log in
Answer the question
In order to leave comments, you need to log in
This is possible if you use a proxy object. That is, all links in the program will look at the proxy object, which encapsulates a link directly to the object that you want to replace.
// MyClass - тип объекта, который хотим подменить
// унаследоваться необходимо, чтобы не сломать совместимость типов
class MyProxy extends MyClass {
// наш спрятанный объект, который будем заменять в будущем
private MyClass hidden;
@Override
public int hashCode() {
return hidden.hashCode();
}
@Override
public boolean equals(Object o) {
return hidden.equals(o);
}
// и так далее заоверрайдить все-все публичные
// методы наследуемого класса
// правда, с публичными свойствами будет проблема - для
// их замены необходима более сложная логика:
@Override
public int calculate() {
hidden.var = var; // на случай если поле было изменено извне
int result = hidden.calculate();
var = hidden.var; // а это если поле было изменено изнутри
return result;
}
public int var;
// а вот и главный заменщик
void setObject(MyClass new_o) {
hidden = new_o;
var = new_o.var;
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question