首页 > 其他 > 详细

获取类类型

时间:2014-07-16 19:47:26      阅读:377      评论:0      收藏:0      [点我收藏+]

//获得类类型的两种方式
      1、 Class cls1 = Role.class;
      2、  Class cls2 = Class.forName("yui.Role");

  注意第二种方式中,forName中的参数一定是完整的类名(包名+类名),并且这个方法需要捕获异常。

  现在得到cls1就可以创建一个Role类的实例了,利用Class的newInstance方法相当于调用类的默认的构造器

  Object o = cls1.newInstance(); //创建一个实例 

      //Object o1 = new Role();   //与上面的方法等价

  这样就创建了一个对象,缺点是我们只能利用默认构造函数,因为Class的newInstance是不接受参数的,后面会讲到可接受参数的newInstance

  第二,如果类的构造函数是private的,比如Class,我们仍旧不能实例化其对象。

  首先介绍一下Constructor类,这个类用来封装反射得到的构造器,Class有四个方法来获得Constructor对象

  public Constructor<?>[] getConstructors()      返回类中所有的public构造器集合,默认构造器的下标为0

  public Constructor<T> getConstructor(Class<?>... parameterTypes)   返回指定public构造器,参数为构造器参数类型集合

  public Constructor<?>[] getDeclaredConstructors()  返回类中所有的构造器,包括私有

  public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 返回任意指定的构造器

  从名字来看,还是很好懂的,带上Declared的都是获得所有的构造方法,包括私有

  //指定参数列表获取特定的方法  
      Constructor con = cls1.getDeclaredConstructor(new Class[]{String.class}); //获取含有只有一个String
      con.setAccessible(true); //设置可访问的权限  
      Object obj = con.newInstance(new Object[]{"liyang"}); //注意这里Constructor的newInstance方法就可以设置参数了
      System.out.println(obj);  //打印一下这个对象的信息

  public Field getDeclaredField(String name)  获取任意指定名字的成员
  public Field[] getDeclaredFields()             获取所有的成员变量
  public Field getField(String name)           获取任意public成员变量
  public Field[] getFields()                          获取所有的public成员变量

  其他的非构造方法获取也是类似的

获取类类型,布布扣,bubuko.com

获取类类型

原文:http://www.cnblogs.com/qiyongliang/p/3837385.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!