import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;/*** 反射的 Utils 函数集合* 提供访问私有变量, 获取泛型类型 Class, 提取集合中元素属性等 Utils 函数* @author Administrator**/
public class ReflectionUtils {/*** 通过反射, 获得定义 Class 时声明的父类的泛型参数的类型* 如: public EmployeeDao extends BaseDao<Employee, String>* @param clazz* @param index* @return*/@SuppressWarnings("unchecked")public static Class getSuperClassGenricType(Class clazz, int index){Type genType = clazz.getGenericSuperclass();if(!(genType instanceof ParameterizedType)){return Object.class;}Type [] params = ((ParameterizedType)genType).getActualTypeArguments();if(index >= params.length || index < 0){return Object.class;}if(!(params[index] instanceof Class)){return Object.class;}return (Class) params[index];}/*** 通过反射, 获得 Class 定义中声明的父类的泛型参数类型* 如: public EmployeeDao extends BaseDao<Employee, String>* @param <T>* @param clazz* @return*/@SuppressWarnings("unchecked")public static<T> Class<T> getSuperGenericType(Class clazz){return getSuperClassGenricType(clazz, 0);}/*** 循环向上转型, 获取对象的 DeclaredMethod* @param object* @param methodName* @param parameterTypes* @return*/public static Method getDeclaredMethod(Object object, String methodName, Class<?>[] parameterTypes){for(Class<?> superClass = object.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()){try {//superClass.getMethod(methodName, parameterTypes);return superClass.getDeclaredMethod(methodName, parameterTypes);} catch (NoSuchMethodException e) {//Method 不在当前类定义, 继续向上转型}//..}return null;}/*** 使 filed 变为可访问* @param field*/public static void makeAccessible(Field field){if(!Modifier.isPublic(field.getModifiers())){field.setAccessible(true);}}/*** 循环向上转型, 获取对象的 DeclaredField* @param object* @param filedName* @return*/public static Field getDeclaredField(Object object, String filedName){for(Class<?> superClass = object.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()){try {return superClass.getDeclaredField(filedName);} catch (NoSuchFieldException e) {//Field 不在当前类定义, 继续向上转型}}return null;}/*** 直接调用对象方法, 而忽略修饰符(private, protected)* @param object* @param methodName* @param parameterTypes* @param parameters* @return* @throws InvocationTargetException * @throws IllegalArgumentException */public static Object invokeMethod(Object object, String methodName, Class<?> [] parameterTypes,Object [] parameters) throws InvocationTargetException{Method method = getDeclaredMethod(object, methodName, parameterTypes);if(method == null){throw new IllegalArgumentException("Could not find method [" + methodName + "] on target [" + object + "]");}method.setAccessible(true);try {return method.invoke(object, parameters);} catch(IllegalAccessException e) {System.out.println("不可能抛出的异常");} return null;}/*** 直接设置对象属性值, 忽略 private/protected 修饰符, 也不经过 setter* @param object* @param fieldName* @param value*/public static void setFieldValue(Object object, String fieldName, Object value){Field field = getDeclaredField(object, fieldName);if (field == null)throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]");makeAccessible(field);try {field.set(object, value);} catch (IllegalAccessException e) {System.out.println("不可能抛出的异常");}}/*** 直接读取对象的属性值, 忽略 private/protected 修饰符, 也不经过 getter* @param object* @param fieldName* @return*/public static Object getFieldValue(Object object, String fieldName){Field field = getDeclaredField(object, fieldName);if (field == null)throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]");makeAccessible(field);Object result = null;try {result = field.get(object);} catch (IllegalAccessException e) {System.out.println("不可能抛出的异常");}return result;}
}

java反射的工具类的函数集合相关推荐

  1. java 反射 接口工具类_Java 反射工具类 ReflectionUtils

    import lombok.extern.slf4j.Slf4j; import java.lang.reflect.*; /** * 反射的 Utils 函数集合 * 提供访问私有变量, 获取泛型类 ...

  2. java list排序工具类_java 之 Collections集合工具类排序

    数组有工具类Arrays,集合也有一个工具类Collections. sort方法: sort(List list):根据其元素natural ordering对制定的列表进行排序 sort(List ...

  3. Java导入Excel工具类使用教程

    前言: 本工具类提供了Excel导入功能,通过反射机制将Excel中数据映射到实体类中,从而获取Excel数据,工具类依赖org.apache.poi包.支持RESTful API,支持Spring ...

  4. java轻量级并行工具类_16 个超级实用的 Java 工具类

    原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...

  5. java时间日期工具类_java日期处理工具类

    java日期处理工具类 import java.text.DecimalFormat; import java.text.ParsePosition; import java.text.SimpleD ...

  6. 6章:常用工具类以及函数

    2019独角兽企业重金招聘Python工程师标准>>> <div class="box"><div class="w_320" ...

  7. Java封装OkHttp3工具类

    点击关注公众号,Java干货及时送达  作者:如漩涡 https://blog.csdn.net/m0_37701381 Java封装OkHttp3工具类,适用于Java后端开发者 说实在话,用过挺多 ...

  8. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  9. java 反射获取实体类_Java 通过反射给实体类赋值操作

    表单提交这个方法是挺方便的,但在java来说就显得有些麻烦了, 怎么个麻烦呢,就是当你字段多的时候,你就得一个一个的获取其对应的值,这样代码量就多了起来,其代码量不说,维护也是一个问题. 所以就有了这 ...

最新文章

  1. 如何给上传控件上色【HOW TO SET CSS FOR THE CONTROL OF FILEUPLOAD】
  2. 学习笔记:验证对称二叉树
  3. 英媒:滴滴和优步每年烧钱64亿
  4. mysql数据库行业应用_腾讯云发布MySQL 8.0数据库 可应用至更多行业场景
  5. 牛客网dp专题 数位dp
  6. 【大师分享】人工智能始发力,医学影像更清晰
  7. jquery.ui.sortable 笔记
  8. C#: switch语句的重构『网摘』
  9. Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库
  10. c语言第六章谭浩强ppt,谭浩强C语言课件第6章.ppt
  11. java除法运算有小数_Java 整数间的除法运算如何保留所有小数位?
  12. 移动边缘计算与计算卸载概述
  13. php 模拟登陆微信,PHP实现微信模拟登陆的实例介绍
  14. 【TJOI2019】唱、跳、rap和篮球(DP)(容斥)
  15. SEO人员必备技术有哪些
  16. 小武匠师PPT 基础篇(一)-武文杰-专题视频课程
  17. scrollTop兼容性问题
  18. Excel服务器数据库修改,excel服务器与数据库
  19. 痛彻心扉:学了半年 Python,还是找不到工作!
  20. 干货!#黑客大会PPT资源#,快来领取吧!

热门文章

  1. Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 思维 + 逆序对
  2. 【NOIP2018】赛道修建【二分】【树形dp】【multiset】【贪心】
  3. CF626F. Bear and Fair Set
  4. P4009 汽车加油行驶问题
  5. AtCoder ZONe Energy Programming Contest 题解
  6. [CQOI]九连环(FFT优化+高精)
  7. 51nod1227-平均最小公倍数【杜教筛,欧拉函数】
  8. P7115-[NOIP2020]移球游戏【构造】
  9. NOI.AC#2007-light【根号分治】
  10. jzoj3085-图的计数【组合数,数论】