zoukankan      html  css  js  c++  java
  • 获取类类型

    //获得类类型的两种方式
          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成员变量

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

  • 相关阅读:
    HDU 3565 Bi-peak Number(数位DP)题解
    FJNU Fang G and his Friends(状压DP)题解
    newcoder 小A的柱状图(单调栈)题解
    CodeForces 518E Arthur and Questions(贪心 + 思维)题解
    装饰器来激活生成器
    迭代器(Iterator)和生成器(generator)浅析
    简单的获取网页样式元素(装饰器实现)
    多层装饰器的调用及执行顺序
    三角形的输出
    简单的用户登录(文件处理)
  • 原文地址:https://www.cnblogs.com/qiyongliang/p/3837385.html
Copyright © 2011-2022 走看看