先贴代码
首先定义一个People接口
public interface People {
String work();
}
然后实现InvocationHandler接口
public class WorkHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("invoke success");
return "0000";
}
}
接下来我用两种方式创建代理类
第一种
static void proxyTest() {
People proxy = (People) Proxy.newProxyInstance(WorkHandler.class.getClassLoader(), People.class.getInterfaces(), new WorkHandler());
proxy.work();
}
运行结果,报错
Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to org.example.services.People
第二种
static void proxyTest() {
People proxy = (People) Proxy.newProxyInstance(WorkHandler.class.getClassLoader(), new Class[]{People.class}, new WorkHandler());
proxy.work();
}
运行结果,成功
invoke success
对于第一种结果是在我预期的,因为getInterfaces()只能获取该对象直接实现的接口,People并未继承任何接口所以报错;但是第二种方法中,我传入接口数组,可以取到People接口中定义的接口
new Class[]{People.class}
请教各位大神,这个是什么原因?