A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 位雪 中级黑马   /  2012-7-12 03:11  /  1911 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 位丹丹 于 2012-7-12 12:50 编辑
  1. package cn.itcast.day3;

  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.InvocationHandler;
  4. import java.lang.reflect.Method;
  5. import java.lang.reflect.Proxy;
  6. import java.util.Collection;

  7. public class ProxyTest {

  8. /**
  9. * @param args
  10. */
  11. public static void main(String[] args)throws Exception {
  12. // TODO Auto-generated method stub

  13. Class clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
  14. System.out.println(clazzProxy1.getName());

  15. System.out.println("------begin constructors list------");
  16. /*$Proxy0()
  17. $Proxy0(InvocationHandler,int)*/
  18. Constructor[] constructors = clazzProxy1.getConstructors();
  19. for(Constructor constructor : constructors){
  20. String name = constructor.getName();
  21. StringBuilder sBuilder = new StringBuilder(name);
  22. sBuilder.append('(');
  23. Class[] clazzParams = constructor.getParameterTypes();
  24. for(Class clazzParam : clazzParams){
  25. sBuilder.append(clazzParam.getName()).append(',');
  26. }
  27. if(clazzParams!=null && clazzParams.length != 0)
  28. sBuilder.deleteCharAt(sBuilder.length()-1);
  29. sBuilder.append(')');

  30. System.out.println(sBuilder.toString());
  31. }




  32. System.out.println("------begin methods list------");
  33. /*$Proxy0()
  34. $Proxy0(InvocationHandler,int)*/
  35. Method[] methods = clazzProxy1.getMethods();
  36. for(Method method : methods){
  37. String name = method.getName();
  38. StringBuilder sBuilder = new StringBuilder(name);
  39. sBuilder.append('(');
  40. Class[] clazzParams = method.getParameterTypes();
  41. for(Class clazzParam : clazzParams){
  42. sBuilder.append(clazzParam.getName()).append(',');
  43. }
  44. if(clazzParams!=null && clazzParams.length != 0)
  45. sBuilder.deleteCharAt(sBuilder.length()-1);
  46. sBuilder.append(')');

  47. System.out.println(sBuilder.toString());
  48. }
  49. System.out.println("------begin create instance object------");
  50. //Object obj = clazzProxy1.newInstance();
  51. Constructor constructor = clazzProxy1.getConstructor(InvocationHandler.class);
  52. class MyInvocationHandler1 implements InvocationHandler {

  53. @Override
  54. public Object invoke(Object proxy, Method method, Object[] args)
  55. throws Throwable {
  56. // TODO Auto-generated method stub
  57. return null;
  58. }
  59. Collection proxy1 = (Collection)constructor.newInstance(new MyInvocationHandler1());//

  60. System.out.println(proxy1);


  61. }
  62. }

  63. }
复制代码
最后一行打印代码System.out.println(proxy1);为什么不能打印?求解答。。。。。。


2 个回复

倒序浏览
缩进一下
Collection proxy1 = (Collection)constructor.newInstance(new MyInvocationHandler1());//
System.out.println(proxy1);
这2句直接写在了ProxyTest类里面,放进main函数里面

打印出来的结果是null,但对象是创建成功了
只是还没有补全invoke方法,所以这个对象的toString方法返回了null

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
温少邦 发表于 2012-7-12 08:01
缩进一下
Collection proxy1 = (Collection)constructor.newInstance(new MyInvocationHandler1());//
Syst ...

:handshake,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马