为了账号安全,请及时绑定邮箱和手机立即绑定

关于作业的问题

关于作业的代码实现: InvocationHandler logh=new LogHandler(m); Class

cls2=m.getClass(); Moveable m2=(Moveable)Proxy.newProxyInstance(cls2.getClassLoader(),cls2.getInterfaces(),logh); m2.move(); 请问一下,以上实现方式有啥问题,为什么会报错?

正在回答

5 回答

System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
Subject subject = (Subject) Proxy.newProxyInstance(Client.class.getClassLoader(),new Class[]{Subject.class},new JdkProxySubject(new RealSubject()));
subject.hello();
MathSubject mathSubject = new MathSubject();
InvocationHandler mathHandler= new ProxySubject(mathSubject);
Class<?> cls = mathSubject.getClass();
Subject mathSubjectResult = (Subject) Proxy.newProxyInstance(Client.class.getClassLoader(), cls.getInterfaces(), mathHandler);

InvocationHandler logmathHandler= new LogProxySubject(mathSubjectResult);

Subject  mathResult = (Subject) Proxy.newProxyInstance(Client.class.getClassLoader(), cls.getInterfaces(), logmathHandler);

mathResult.hello("wahahaha");
mathResult.request();

// 根据资料,添加了LogProxySubject, ProxySubjec , 替换了JdkProxySubject中的Class换为Interface 接口类Subject,这样就好了。

0 回复 有任何疑惑可以回复我~

代理类实现的都是moveable接口,所以Class<?> cls = Car.getClass()这一行代码不用更改,删掉

Class cls2=m.getClass();类加载器和接口换回cls就好。


0 回复 有任何疑惑可以回复我~

JDK 动态代理作业可以参考这个

https://github.com/imooc-java/proxy/blob/master/src/test/java/com/imooc/jdkproxy/HandlerTest.java

1 回复 有任何疑惑可以回复我~

有什么错误,你贴出来塞

0 回复 有任何疑惑可以回复我~

第二行应该改成 Class<?> clsw = m.getClass();

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
模式的秘密---代理模式
  • 参与学习       54912    人
  • 解答问题       98    个

本节课程将带你领略Java编程语言中代理模式的奥妙

进入课程

关于作业的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信