Как сделать объект, возвращаемый java.lang.reflect.Proxy.newProxyInstance () для расширения другого класса - PullRequest
2 голосов
/ 09 декабря 2011
newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h); 

Возвращает экземпляр прокси-класса для указанных интерфейсов, который отправляет вызовы методов указанному обработчику вызовов.

Мне нужно инкапсулировать экземпляр, возвращенный этим методом (например, в какой-то другой класс), чтобы он также расширял другой класс. Таким образом, последний класс будет расширять один класс и реализовывать указанные интерфейсы.

класс для расширения:

public class IProxy {

ObjectRef oref;

public IProxy(ObjectRef oref) {
    this.oref = oref;
}

}

поэтому процесс должен быть:

MyInterface() mi=(MyInterface) newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h);

// some magic trick

и в конце я хотел бы получить экземпляр класса, который расширяет IProxy и реализует все интерфейсы, которые реализовал mi.

1 Ответ

2 голосов
/ 09 декабря 2011

Вы не можете сделать это, потому что объект, возвращенный из newProxyInstance, уже наследуется от какого-то другого класса, и вы не можете наследовать от двух классов в Java.вашего класса, который реализует интерфейс InvocationHandler.Вы инициализируете oref в конструкторе InvocationHandler и предоставите интерфейс для доступа к oref через метод:

public interface IProxy {
    ObjectRef getOref();
}

Ваш InvocationHandler должен отвечать на вызовы getOrefвозвращая oref члена.

...