Допустим, есть класс:
abstract class A {
public abstract void foo(int i);
public abstract void bar();
}
class B extends A {
@Override
public void foo(int i) { ... }
@Override
public void bar() { ... }
}
Я хочу запилить свой класс:
class C extends A {
private final B b;
C(B b) {
this.b = b;
}
@Override
public void foo(int i) {
b.foo(i * 2);
}
@Override
public void bar() {
b.bar();
}
}
То есть он по сути дела является обёрткой над классом B, которая модифицирует поведение одного из методов (точнее выполняет некоторую предобработку аргументов), а все остальные просто проксирует без изменений.
Разумеется, в реальности методов у класса B не 2, а больше.
Я хочу создать объект-прокси полностью в рантайме (с помощью, например, javassist). Более того, я даже знать не хочу, какие конкретно методы есть у класса A кроме того, в который я хочу влезть, но они должны правильно отпроксироваться.
Как такое запилить?
P. S.: Я понимаю, что полученный класс не будет полной заменой класса B, но мне это и не нужно - всё равно весь код работает с ним только как с классом A.