java反射 获取方法_java反射之获取类的信息方法(推荐)
本文接上文“老生常談反射之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反射之獲取類的信息方法(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持萬仟網。
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的java反射 获取方法_java反射之获取类的信息方法(推荐)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Schema evolution in
- 下一篇: 软件测试的艺术