• 反射(二)


    一,通过Class类取得类的完整结构

    1.1 在Class类中存在以下的方法,可以取得一个类继承的父类

    public Class<? super T> getSuperclass()

    1.2 取得实现的全部接口

    public Class<?>[] getInterfaces()

    1.3 取得一个类的全部构造方法

    public Constructor<?>[] getConstructors()

    得到访问修饰符:public int getModifiers()

    得到全部的参数:public Class<?>[] getParameterTypes()

    在实际的开发中所有的访问权限基本上都是以数字的形式表示出来的,对于public,private而言本身也是对应着一个数字,而且对于public static final,实际上是属于三个值相加的结果,所以,如果要想正确的还原一个方法的访问修饰符,则必须是用一个Modifer的类进行还原,在该类中存在方法:

    public static String toString(int mod)

    还原访问修饰符

    1.4取得一个类的全部方法

    public Methos[] getMethods()

    得到方法的返回值类型:public Class<?>  getReturnType()

    取得方法的全部参数:public Class<?>[]  getParameterTypes()

    取得方法的抛出异常:public Class<?>[]  getExceptionTypes()

    1.5取得一个类中的全部属性

    得到继承而来的公共属性:public Field[] getFields()

    得到自定义的属性:public Field[] getDeclaredFields()

    得到属性的数据类型:getType()

    import java.lang.reflect.Constructor;
    import java.lang.reflect.Method;
    import java.lang.reflect.Modifier;


    interface info
    {
     public String getInfo();
     public String say(String name,String content);
     public void sayHello();
    }
    class Person implements info
    {
     private String name;
     private int age;
     public Person(){}
     public Person(String name)
     {
      this.name=name;
     }
     public Person(String name,int age)
     {
       this(name);
       this.age=age;
     }
     public String getInfo() {
      return "Hello";
     }
     public String say(String name, String content) {
      return "world";
     }
     public void sayHello() {
      System.out.println("new Year!");
     }
    }
    public class ReflectDemo {
     public static void main(String args[]) throws Exception
     {
      //取得继承的父类
      Class<?> c=Class.forName("Person");
      Class<?> sc=c.getSuperclass();
      System.out.println(sc.getName());
      //取得实现的全部接口
      Class<?> ic[]=c.getInterfaces();
      for(Class<?> iic:ic)
      {
       System.out.println(iic.getName());
      }
      //取得一个类的全部构造方法
      Constructor<?> cc[]=c.getConstructors();
      for(Constructor c1:cc)
      {
       //得到修饰符对应的值
       int mod=c1.getModifiers();
       //还原访问修饰符
       String md=Modifier.toString(mod);
       //得到全部参数
       Class<?> param[]=c1.getParameterTypes();
       System.out.println(md+" "+c1.getName()+"(");
       for(int i=0;i<param.length;i++)
       {
        System.out.println(param[i].getName()+",");
       }
       System.out.println(")");
      }
      //取得一个类的全部方法
      Method[] mc=c.getMethods();
      for(Method m:mc)
      {
       System.out.println(m.getReturnType()+m.getName());
      }
     } 
    }

  • 相关阅读:
    this_is_flag
    攻防世界-misc-如来十三掌
    攻防世界-misc-pdf
    nextcloud取消新用户的默认文件
    nextcloud开放注册-添加注册功能
    图片马制作
    Npoi Web 项目中(XSSFWorkbook) 导出出现无法访问已关闭的流的解决方法
    VS2017 如何安装水晶报表 VS2017 如何下载相应版本的水晶报表 VS2017 水晶报表 中文乱码
    js 带有返回值的 匿名方法
    varchar nvarchar 设计长度时 设计成 (2^n)-1 的好处
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1948880.html
Copyright © 2020-2023  润新知