反射工具类访问方法和属性
来源:互联网 发布:开淘宝店铺介绍怎么写 编辑:程序博客网 时间:2024/05/05 03:33
package com.itany.util;
import java.lang.reflect.*;
/*
* 反射工具类
*/
public class ReflectUtil {
/*
*通过反射,获取定义Class的父类参数的泛型的真实类型
*/
publicstatic Class getSuperClassGenericType(Class clazz,int index)
throws Exception {
//父类类型
Type type = clazz.getGenericSuperclass();
//父类类型不带泛型
if (!(typeinstanceof ParameterizedType)) {
return Object.class;
}
//父类类的参数类型
Type[] params = ((ParameterizedType) type).getActualTypeArguments();
//下标不符合要求
if (index <0 || index >= params.length) {
thrownew Exception("此位置没有泛型");
}
return (Class) params[index];
}
/*
*通过反射,获取定义Class的父类参数的泛型的真实类型
*/
publicstatic Class getSuperClassGenericType(Class clazz)throws Exception {
return (Class) getSuperClassGenericType(clazz,0);
}
/*
*通过反射,获取对应方法[当前类+所有父类的所有的方法]
*/
publicstatic Method getDeclaredMethod(Object object, String methodName,
Class... paramaterTypes) {
for (Class clazz = object.getClass(); clazz !=null; clazz = clazz
.getSuperclass()) {
try {
return clazz.getDeclaredMethod(methodName, paramaterTypes);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
returnnull;
}
/*
* 调用方法
*/
publicstatic Object invokeMethod(Object object,String methodName,Object[]parameters,Class... paramaterTypes)throws NoSuchMethodException{
//得到对应方法
Method m = getDeclaredMethod(object,methodName,paramaterTypes);
if(m==null){
thrownew NoSuchMethodException(methodName+"在"+object.getClass().getName()+"不存在");
}
//设置可访问,主要针对于私有方法,使其亦可访问
m.setAccessible(true);
try {
return m.invoke(object, parameters);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
returnnull;
}
/*
*通过反射,获取对应属性[当前类+所有父类所有属性]
*/
publicstatic Field getDeclaredField(Object object,String fieldName){
for(Class clazz = object.getClass();clazz!=null;clazz=clazz.getSuperclass()){
try {
return clazz.getDeclaredField(fieldName);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
returnnull;
}
/*
*给属性赋值
*/
publicstatic void setFieldValue(Object object,String fieldName,Object value)throws NoSuchFieldException{
//得到属性
Field field = getDeclaredField(object,fieldName);
if(field==null){
thrownew NoSuchFieldException(fieldName+"在"+object.getClass().getName()+"中不存在");
}
//设置属性的访问级别,主要针对于私有属性,使其亦可访问
field.setAccessible(true);
try {
field.set(object, value);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
/*
*获取属性的值
*/
publicstatic Object getFieldValue(Object object,String fieldName)throws NoSuchFieldException{
//得到属性
Field field = getDeclaredField(object,fieldName);
if(field==null){
thrownew NoSuchFieldException(fieldName+"在"+object.getClass().getName()+"中不存在");
}
//设置属性的访问级别,主要针对于私有属性,使其亦可访问
field.setAccessible(true);
try {
return field.get(object);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
returnnull;
}
}
- 反射工具类访问方法和属性
- 反射:使用字符串访问类、方法和属性
- 通过反射访问任意类的私有方法和属性
- java反射访问私有属性和方法
- java 反射方式访问私有属性和方法
- 通过反射访问属性(Attribute)信息的工具类
- Java中利用反射对类的hidden成员方法和属性的访问
- java反射:获取父类中的所有属性和方法工具类
- java反射:获取父类中的所有属性和方法工具类
- 反射访问类的私有属性对象的私有方法
- 利用反射机制访问父类私有变量和属性
- 反射类属性方法
- 反射获取属性和方法
- JAVA动态访问类方法和属性
- 访问类的方法和属性
- 静态属性和方法访问数据库类
- Java访问私有属性(不使用getter方法和反射)
- Java反射的三种实现方式,访问私有方法和私有属性
- PB数据窗口将某一列或者某几列重复值合并
- 2016/11/17 java基础
- 为什么使用RxJS
- 使用免费组件给PDF文档添加文本和图片页眉
- 数据结构与算法之分治法(棋盘覆盖算法&循环赛事日程表)
- 反射工具类访问方法和属性
- 再生核Hilbert空间
- NumPy基础功能索引
- django 中 django-admin & manage.py
- javascript学习之选择结构(2)—— switch
- 拆轮子系列:拆 RxJava
- 手动开启全屏与手动退出全屏
- IAAS、PAAS和SAAS的区别
- 【推荐课程】unity3D-游戏/AR/VR在线就业班Unity引擎