Я хотел бы получить доступ к имени класса базового класса, который является экземпляром java.lang.reflect.Proxy
.
Действительно ли это возможно?
Вы можете получить InvocationHandler
, с помощью которого был создан прокси, вызвав Proxy.getInvocationHandler (proxy)
Обратите внимание, что в случае java.lang.reflect.Proxy
не существует базового класса как такового. Прокси-сервер определяется:
И обернутый класс обычно передается конкретному обработчику вызова.
Ну, экземпляр Proxy не будет экземпляром java.lang.reflect.Proxy
как таковой . Скорее, это будет экземпляр подкласса из java.lang.reflect.Proxy
.
В любом случае, способ получить фактическое имя прокси-классов:
Proxy proxy = ...
System.err.println("Proxy class name is " + proxy.getClass().getCanonicalName());
Однако вы не можете получить имя класса, для которого прокси является прокси-сервером, потому что:
Однако, глядя на исходный код класса ProxyGenerator
, кажется, что интерфейсы записаны в сгенерированном классе прокси как интерфейсы класс. Таким образом, вы должны иметь возможность получать их во время выполнения через объект прокси-классов Class
; например
Class<?>[] classes = proxy.getClass().getInterfaces();
(Примечание: я не пробовал это ...)