Devil_aurora 2020-10-16 10:41 采纳率: 0%
浏览 188

关于java代理类中newProxyInstance方法中的第二个参数,传入接口数组的问题

先贴代码

首先定义一个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}



请教各位大神,这个是什么原因?

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-10-16 12:25
    关注
    评论

报告相同问题?