黑马程序员技术交流社区

标题: 反射中的getConstructors()的意义 [打印本页]

作者: 广驰    时间: 2012-9-21 21:26
标题: 反射中的getConstructors()的意义
本帖最后由 应广驰 于 2012-9-26 10:41 编辑

使用Class中的getConstructors()并迭代取出的构造函数全都一样,没有参数类型
  1.   Constructor[] constructors = String.class.getConstructors();
  2.                 for(Constructor constructor : constructors)
  3.                 {
  4.                         System.out.println(constructor.getName());
  5.                 }
  6.                 Constructor constructor = String.class.getConstructor(String.class);
  7.                
  8.                 System.out.println(constructor.newInstance("adf").toString());
复制代码
输出的结果为
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
adf
也就是说,他返回的是该类的构造方法名称,并没有构造方法的参数,那么这个方法有什么用呢,用getConstructor()也可以获得函数的,而且还能明确构造方法的参数,那就不需要用到getConstructors()方法了吧


所以说,getConstructors()的意义是什么,在什么时候需要用到他
作者: 张 涛    时间: 2012-9-21 21:42
getName只是打印构造方法的名字,你打印的是String类的构造方法,名字当然都是String了。
你可以再打印出名字后,再用getParameterTypes() 打印出参数,那样就可以得到所有的构造方法了。如:
  1. Constructor[] constructors = String.class.getConstructors();
  2.       for(Constructor constructor : constructors)
  3.       {
  4.               System.out.print(constructor.getName());
  5.               System.out.print("(");
  6.               Class[] clazz = constructor.getParameterTypes();
  7.               for(Class c:clazz){
  8.                       System.out.print(c.getName()+",");
  9.               }
  10.               System.out.print(")");
  11.               System.out.println();
  12.       }
复制代码
结果:
java.lang.String()
java.lang.String(java.lang.String,)
java.lang.String([C,)
java.lang.String([C,int,int,)
java.lang.String([I,int,int,)
java.lang.String([B,int,int,int,)
java.lang.String([B,int,)
java.lang.String(java.lang.StringBuilder,)
java.lang.String([B,int,int,java.lang.String,)
java.lang.String([B,int,int,java.nio.charset.Charset,)
java.lang.String([B,java.lang.String,)
java.lang.String([B,java.nio.charset.Charset,)
java.lang.String([B,int,int,)
java.lang.String([B,)
java.lang.String(java.lang.StringBuffer,)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2