欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java反射之获取类的信息方法(推荐)

程序员文章站 2023-12-22 14:11:46
本文接上文“老生常谈反射之class类的使用(必看篇)”,以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息" 1、获取成员函数...

本文接上文“老生常谈反射之class类的使用(必看篇)”,以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息"

1、获取成员函数信息

/**
 * 获取成员函数信息
 * @param obj
 */
public static void printclassmethodmessage(object obj){
  //获取类的信息  获取类的类类型
  class c = obj.getclass();
  //获取类的名称
  system.out.println("类的名称是:" + c.getname());
  /**
   * methods类,方法对象
   * 一个成员方法就是一个method对象
   * getmethods()方法是获取所有public的函数,包括父类继承而来
   * getdeclaredmethods()获取的是所有该类自己声明的方法,不问访问权限
   */
// method [] ms = c.getmethods();
  method [] ms = c.getdeclaredmethods();
  for (method m : ms) {
    //得到方法返回值的类类型
    class returntype = m.getreturntype();
    system.out.print(returntype.getname() + " ");
    //得到方法名称
    system.out.print(m.getname() + "(");
    //获取参数类型(得到的是参数列表的类型的类类型)
    class[] paramtypes = m.getparametertypes();
    for (class paramtype : paramtypes) {
      system.out.print(paramtype.getname()+",");
    }
    system.out.println(")");
  }
}

2、获取成员变量信息

/**
 * 获取成员变量信息
 * @param obj
 */
public static void printclassfieldmessage(object obj) {
  class c = obj.getclass();
  /**
   * 成员变量也是对象
   * field类封装了关于成员变量的操作
   * getfields()获取的是所有的public的成员变量信息
   * getdeclaredfields()获取的是该类自己声明的成员变量信息
   */
//    field [] fs = c.getfields();
  field[] fs = c.getdeclaredfields();
  for (field f : fs) {
    //得到成员变量的类型的类类型
    class fieldtype = f.gettype();
    string typename = fieldtype.getname();
    //得到成员变量的名称
    string fieldname = f.getname();
    system.out.println(typename+" "+fieldname);
  }
}

3、获取构造函数信息

public static void printconmessage(object obj){
  class c = obj.getclass();
  /**
   * 构造函数也是对象
   * java.lang.constructor封装了构造函数的信息
   * getconstructors()获取所有的public构造函数
   * getdeclaredconstructors()获取所有的构造函数
   */
//    constructor[] cs = c.getconstructors();
  constructor[] cs = c.getdeclaredconstructors();
  for (constructor constructor : cs) {
    system.out.print(constructor.getname()+"(");
    //获取构造函数的参数列表,得到的是参数列表的类类型
    class[] paramtypes = constructor.getparametertypes();
    for (class paramtype : paramtypes) {
      system.out.print(paramtype.getname()+",");
    }
    system.out.println(")");
  }
}

4、工具类代码

package com.format.util;

import java.lang.reflect.constructor;
import java.lang.reflect.field;
import java.lang.reflect.method;

/**
 * 打印类的信息,成员函数、成员变量
 * created by format on 2017/6/3.
 */
public class classutil {

  /**
   * 获取成员函数信息
   * @param obj
   */
  public static void printclassmethodmessage(object obj){
    //获取类的信息  获取类的类类型
    class c = obj.getclass();
    //获取类的名称
    system.out.println("类的名称是:" + c.getname());
    /**
     * methods类,方法对象
     * 一个成员方法就是一个method对象
     * getmethods()方法是获取所有public的函数,包括父类继承而来
     * getdeclaredmethods()获取的是所有该类自己声明的方法,不问访问权限
     */
//    method [] ms = c.getmethods();
    method [] ms = c.getdeclaredmethods();
    for (method m : ms) {
      //得到方法返回值的类类型
      class returntype = m.getreturntype();
      system.out.print(returntype.getname() + " ");
      //得到方法名称
      system.out.print(m.getname() + "(");
      //获取参数类型(得到的是参数列表的类型的类类型)
      class[] paramtypes = m.getparametertypes();
      for (class paramtype : paramtypes) {
        system.out.print(paramtype.getname()+",");
      }
      system.out.println(")");
    }
  }

  /**
   * 获取成员变量信息
   * @param obj
   */
  public static void printclassfieldmessage(object obj) {
    class c = obj.getclass();
    /**
     * 成员变量也是对象
     * field类封装了关于成员变量的操作
     * getfields()获取的是所有的public的成员变量信息
     * getdeclaredfields()获取的是该类自己声明的成员变量信息
     */
//    field [] fs = c.getfields();
    field[] fs = c.getdeclaredfields();
    for (field f : fs) {
      //得到成员变量的类型的类类型
      class fieldtype = f.gettype();
      string typename = fieldtype.getname();
      //得到成员变量的名称
      string fieldname = f.getname();
      system.out.println(typename+" "+fieldname);
    }
  }

  /**
   * 获取构造函数信息
   * @param obj
   */
  public static void printconmessage(object obj){
    class c = obj.getclass();
    /**
     * 构造函数也是对象
     * java.lang.constructor封装了构造函数的信息
     * getconstructors()获取所有的public构造函数
     * getdeclaredconstructors()获取所有的构造函数
     */
//    constructor[] cs = c.getconstructors();
    constructor[] cs = c.getdeclaredconstructors();
    for (constructor constructor : cs) {
      system.out.print(constructor.getname()+"(");
      //获取构造函数的参数列表,得到的是参数列表的类类型
      class[] paramtypes = constructor.getparametertypes();
      for (class paramtype : paramtypes) {
        system.out.print(paramtype.getname()+",");
      }
      system.out.println(")");
    }
  }

}

以上这篇java反射之获取类的信息方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

上一篇:

下一篇: