com.sun.proxy.$Proxy0 cannot be cast to ...

Bertha 。 2021-08-11 17:35 998阅读 0赞

【错误提示】

  1. Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to proxy.test.Bank
  2. at proxy.test.ProxyTest2.main(ProxyTest2.java:40)

【报错代码】

  1. package proxy.test;
  2. import java.lang.reflect.InvocationHandler;
  3. import java.lang.reflect.Method;
  4. import java.lang.reflect.Proxy;
  5. /*
  6. * 自测
  7. */
  8. interface Bank{
  9. public void loan(String name,int money) ;
  10. }
  11. class Creditor implements Bank{
  12. @Override
  13. public void loan(String name,int money) {
  14. // TODO Auto-generated method stub
  15. System.out.println("贷款人:"+name+",贷款金额(万元):"+money);
  16. }
  17. }
  18. class MyInvocationHandler2 implements InvocationHandler{
  19. private Object obj;
  20. public MyInvocationHandler2(Object obj) {
  21. this.obj=obj;
  22. }
  23. @Override
  24. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  25. // TODO Auto-generated method stub
  26. return method.invoke(obj, args);
  27. }
  28. }
  29. public class ProxyTest2 {
  30. public static void main(String[] args) {
  31. Bank credictor=new Creditor();
  32. InvocationHandler handler=new MyInvocationHandler2(credictor);
  33. Bank bank=(Bank)Proxy.newProxyInstance(Bank.class.getClassLoader(), Bank.class.getInterfaces(), handler);
  34. bank.loan("王二小", 300);
  35. }
  36. }

【错误改正】

  1. main方法中
  2. Bank bank=(Bank)Proxy.newProxyInstance(Bank.class.getClassLoader(), Bank.class.getInterfaces(), handler);
  3. 改为:
  4. Bank bank=(Bank)Proxy.newProxyInstance(credictor.getClass().getClassLoader(), credictor.getClass().getInterfaces(), handler);

【错误原因】

loader:代表与目标对象相同的类加载器———-目标对象.getClass().getClassLoader()

上述中的目标对象为credictor(贷款者)

【正确输出】

20190902130135516.png

发表评论

表情:
评论列表 (有 0 条评论,998人围观)

还没有评论,来说两句吧...

相关阅读