JAVA动态代理

student_du 2018-11-19 10:15:06
今天写动态代理的时候发现了
Proxy.newProxyInstance的第二个参数为 new Class[]{Father.class}
不应该是Father.class.getInterfaces()吗? 第二个参数不应该是实现代理接口的接口吗?
为什么编程代理接口的字节码文件数组了,求解!
...全文
144 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Silly-77 2018-11-22
  • 打赏
  • 举报
回复
这个地方是为了实现多态。就是说他只需要代理对象 继承就好了。这个地方数组的使用,表示的是我将要给我需要代理的对象提供一组声明接口或者一个父类,如果我提供了一组接口(类)给他,那么这个代理对象就宣称实现了该接口或者类(多态),这样我就能调用这组接口或者父类中的方法了。

public class Test {
public static void main(String[] args) {
// 被代理的对象
Father f= new Father ();
/**
* 通过InvocationHandlerImpl的构造器生成一个InvocationHandler对象,
* 需要传入被代理对象作为参数
*/
InvocationHandler handler = new InvocationHandlerImpl(realSubject);
ClassLoader loader = f.getClass().getClassLoader();
// 需要指定类装载器、一组接口及调用处理器生成动态代理类实例
Subject subject = (Subject) Proxy.newProxyInstance(loader,new Class[]{Father.class}, handler);
}
}
八位比特 2018-11-19
  • 打赏
  • 举报
回复
真正有用的是class文件,接口是抽象概念。不能用,能使用的是class

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧