java.lang.reflect.Proxy
может быть приведен только к Interface
, и эта строка кода p.getClass().getInterfaces()
вернет пустой интерфейс, потому что Person2
не реализует ничего,
поэтому для исправления этого Person2
необходимо реализовать Interface
:
public class Person2 implements IPerson{
private String name;
public Person2(String name) {
this.name = name;
}
@Override
public void say() {
System.out.println("Person:" + name);
}
}
Интерфейс:
public interface IPerson {
public void say();
}
затем в основном статическом методе может привести Proxy к Интерфейсу и вызвать метод:
public class TestProxy {
public static void main(String [] args) {
Person2 p = new Person2("myName");
InvocationHandler invocationHandler = new MyHandler(p);
IPerson obj = (IPerson) Proxy.newProxyInstance(
p.getClass().getClassLoader(),
p.getClass().getInterfaces(),
invocationHandler);
obj.say();
}
}