java反射之獲取類的信息方法(推薦)
更新時間:2017年06月05日 08:11:00 投稿:jingxian
下面小編就為大家?guī)硪黄猨ava反射之獲取類的信息方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
本文接上文“老生常談反射之Class類的使用(必看篇)”,以編寫一個用來獲取類的信息(成員函數(shù)、成員變量、構造函數(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()獲取的是所有該類自己聲明的方法,不問訪問權限
*/
// 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類封裝了關于成員變量的操作
* 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、獲取構造函數(shù)信息
public static void printConMessage(Object obj){
Class c = obj.getClass();
/**
* 構造函數(shù)也是對象
* java.lang.Constructor封裝了構造函數(shù)的信息
* getConstructors()獲取所有的public構造函數(shù)
* getDeclaredConstructors()獲取所有的構造函數(shù)
*/
// Constructor[] cs = c.getConstructors();
Constructor[] cs = c.getDeclaredConstructors();
for (Constructor constructor : cs) {
System.out.print(constructor.getName()+"(");
//獲取構造函數(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()獲取的是所有該類自己聲明的方法,不問訪問權限
*/
// 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類封裝了關于成員變量的操作
* 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);
}
}
/**
* 獲取構造函數(shù)信息
* @param obj
*/
public static void printConMessage(Object obj){
Class c = obj.getClass();
/**
* 構造函數(shù)也是對象
* java.lang.Constructor封裝了構造函數(shù)的信息
* getConstructors()獲取所有的public構造函數(shù)
* getDeclaredConstructors()獲取所有的構造函數(shù)
*/
// Constructor[] cs = c.getConstructors();
Constructor[] cs = c.getDeclaredConstructors();
for (Constructor constructor : cs) {
System.out.print(constructor.getName()+"(");
//獲取構造函數(shù)的參數(shù)列表,得到的是參數(shù)列表的類類型
Class[] paramTypes = constructor.getParameterTypes();
for (Class paramType : paramTypes) {
System.out.print(paramType.getName()+",");
}
System.out.println(")");
}
}
}
以上這篇java反射之獲取類的信息方法(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot中Mybatis + Druid 數(shù)據(jù)訪問的詳細過程
Spring Boot 底層都是采用 SpringData 的方式進行統(tǒng)一處理各種數(shù)據(jù)庫,SpringData也是Spring中與SpringBoot、SpringCloud 等齊名的知名項目,下面看下SpringBoot Mybatis Druid數(shù)據(jù)訪問的詳細過程,感興趣的朋友一起看看吧2021-11-11
Spring中的@ConfigurationProperties詳解
這篇文章主要介紹了Spring中的@ConfigurationProperties詳解,ConfigurationProperties注解主要用于將外部配置文件配置的屬性填充到這個Spring Bean實例中,需要的朋友可以參考下2023-09-09
Java數(shù)據(jù)結構之實現(xiàn)哈希表的分離鏈接法
今天給大家?guī)淼氖顷P于Java數(shù)據(jù)結構的相關知識,文章圍繞著Java哈希表的分離鏈接法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下2021-06-06
SpringBoot將多個文件夾進行壓縮的兩種方法(瀏覽器下載和另存為)
Spring Boot項目通常不會自動對文件夾進行壓縮,不過,在打包應用時,如果你使用了Maven或Gradle這樣的構建工具,并且配置了相應的插件,可以在打成jar或war包的時候將依賴的庫文件合并并壓縮,本文介紹了SpringBoot將多個文件夾進行壓縮的兩種方法2024-07-07

