java反射之獲取類的信息方法(推薦)
本文接上文“老生常談反射之Class類的使用(必看篇)”,以編寫一個用來獲取類的信息(成員函數(shù)、成員變量、構(gòu)造函數(shù))的工具類來講解"反射之獲取類的信息"
1、獲取成員函數(shù)信息
/**
* 獲取成員函數(shù)信息
* @param obj
*/
public static void printClassMethodMessage(Object obj){
//獲取類的信息 獲取類的類類型
Class c = obj.getClass();
//獲取類的名稱
System.out.println("類的名稱是:" + c.getName());
/**
* Methods類,方法對象
* 一個成員方法就是一個Method對象
* getMethods()方法是獲取所有public的函數(shù),包括父類繼承而來
* getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權(quán)限
*/
// 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() + "(");
//獲取參數(shù)類型(得到的是參數(shù)列表的類型的類類型)
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類封裝了關(guān)于成員變量的操作
* 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、獲取構(gòu)造函數(shù)信息
public static void printConMessage(Object obj){
Class c = obj.getClass();
/**
* 構(gòu)造函數(shù)也是對象
* java.lang.Constructor封裝了構(gòu)造函數(shù)的信息
* getConstructors()獲取所有的public構(gòu)造函數(shù)
* getDeclaredConstructors()獲取所有的構(gòu)造函數(shù)
*/
// Constructor[] cs = c.getConstructors();
Constructor[] cs = c.getDeclaredConstructors();
for (Constructor constructor : cs) {
System.out.print(constructor.getName()+"(");
//獲取構(gòu)造函數(shù)的參數(shù)列表,得到的是參數(shù)列表的類類型
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;
/**
* 打印類的信息,成員函數(shù)、成員變量
* Created by Format on 2017/6/3.
*/
public class ClassUtil {
/**
* 獲取成員函數(shù)信息
* @param obj
*/
public static void printClassMethodMessage(Object obj){
//獲取類的信息 獲取類的類類型
Class c = obj.getClass();
//獲取類的名稱
System.out.println("類的名稱是:" + c.getName());
/**
* Methods類,方法對象
* 一個成員方法就是一個Method對象
* getMethods()方法是獲取所有public的函數(shù),包括父類繼承而來
* getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權(quán)限
*/
// 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() + "(");
//獲取參數(shù)類型(得到的是參數(shù)列表的類型的類類型)
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類封裝了關(guān)于成員變量的操作
* 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);
}
}
/**
* 獲取構(gòu)造函數(shù)信息
* @param obj
*/
public static void printConMessage(Object obj){
Class c = obj.getClass();
/**
* 構(gòu)造函數(shù)也是對象
* java.lang.Constructor封裝了構(gòu)造函數(shù)的信息
* getConstructors()獲取所有的public構(gòu)造函數(shù)
* getDeclaredConstructors()獲取所有的構(gòu)造函數(shù)
*/
// Constructor[] cs = c.getConstructors();
Constructor[] cs = c.getDeclaredConstructors();
for (Constructor constructor : cs) {
System.out.print(constructor.getName()+"(");
//獲取構(gòu)造函數(shù)的參數(shù)列表,得到的是參數(shù)列表的類類型
Class[] paramTypes = constructor.getParameterTypes();
for (Class paramType : paramTypes) {
System.out.print(paramType.getName()+",");
}
System.out.println(")");
}
}
}
以上這篇java反射之獲取類的信息方法(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):算法
這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對廣大的程序愛好者有所幫助,同時祝大家有一個好成績,需要的朋友可以參考下,希望能給你帶來幫助2021-07-07
Spring5.2.x 源碼本地環(huán)境搭建的方法步驟
這篇文章主要介紹了Spring5.2.x 源碼本地環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
SpringBoot中使用AOP切面編程實現(xiàn)登錄攔截功能
本文介紹了如何使用AOP切面編程實現(xiàn)Spring Boot中的登錄攔截,通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧2024-12-12
從前端Vue到后端Spring Boot接收JSON數(shù)據(jù)的正確姿勢(常見錯誤及問題)
這篇文章主要介紹了從前端Vue到后端Spring Boot接收JSON數(shù)據(jù)的正確姿勢(常見錯誤及問題),本文將從前端Vue到后端Spring Boot,詳細介紹接收JSON數(shù)據(jù)的正確姿勢,幫助開發(fā)人員更好地處理JSON數(shù)據(jù),感興趣的朋友一起看看吧2024-02-02

