importjava.lang.reflect.Field;importjava.lang.reflect.Method;/*** Java反射工具类

* 提供以下几个功能:

* 1. 取最简类名

* 2. 动态赋值

* 3. 动态取值

* 4. 判断是否普通类型(自定义成员变量)

* 5. 动态取指定类的所有属性名

*@authornmyy

*@version1.0*/

public classReflectUtil {/*** custom commmon field type*/

public static String[] commonFieldType ={"int", "long", "short", "double", "float", "char", "byte", "boolean","class java.lang.String", "class java.lang.Integer", "class java.lang.Long","class java.lang.Short", "class java.lang.Double", "class java.lang.Float","class java.lang.Byte", "class java.lang.Boolean", "class java.math.BigDecimal"};/*** 获取最简类名(去除包名)

* eg : com.csdn.util.ReflectUtil > ReflectUtil

*@paramclassName

*@returnsimpleClassName

*@authornmyy*/

public staticString getSimpleClassName(String className) {return className.substring(className.lastIndexOf(".") + 1);

}/*** 为指定对象的指定属性动态赋予指定值

*@paramobj 指定对象

*@paramfieldName 指定属性

*@paramvalue 指定值

*@returnobj

*@authornmyy*/

public staticObject dynamicSetValue(Object obj, String fieldName, Object value) {try{

String firstLetter= fieldName.substring(0, 1).toUpperCase(); //取属性首字母转大写

String setMethodName = "set" + firstLetter + fieldName.substring(1); //set方法名

Field field = obj.getClass().getDeclaredField(fieldName); //获取属性

Method setMethod = obj.getClass().getDeclaredMethod(setMethodName, field.getType()); //获取set方法

setMethod.invoke(obj, value); //通过set方法动态赋值//obj.getClass().getDeclaredField(fieldName).set(obj, value) 为直接对指定public属性赋值,不实用

} catch(Exception e) {

e.printStackTrace();

}returnobj;

}/*** 动态获取指定对象指定属性的值

*@paramobj 指定对象

*@paramfieldName 指定属性

*@return属性值

*@authornmyy*/

public staticObject dynamicGetValue(Object obj, String fieldName) {

Object value= null;try{//if ( isCommonTypeField(obj, fieldName) ) {//限普通类型

String firstLetter = fieldName.substring(0, 1).toUpperCase(); //取属性首字母转大写

String getMethodName = "get" + firstLetter + fieldName.substring(1); //get方法名

Method getMethod = obj.getClass().getDeclaredMethod(getMethodName); //获取get方法

value = getMethod.invoke(obj); //动态取值//}

} catch(Exception e) {

e.printStackTrace();

}returnvalue;

}/*** 判断指定对象中的指定属性名的类型是否属于自定义普通数据类型

*@paramobj 指定对象

*@paramfieldName 指定属性名

*@return*@authornmyy*/

public static booleanisCommonTypeField(Object obj, String fieldName) {boolean result = false;try{

Field field=obj.getClass().getDeclaredField(fieldName);

String type=field.getGenericType().toString();for ( int i = 0; i < commonFieldType.length; i++) {if( commonFieldType[i].equals(type) ) {

result= true;break;

}

}

}catch(Exception e) {

e.printStackTrace();

}returnresult;

}/*** 获取指定类的所有属性名

*@paramclassName 指定类全名

*@return所有属性名

*@authornmyy*/

public staticString[] getAllFieldName(String className) {

String[] fieldName= null;try{

Field[] fields=Class.forName(className).getDeclaredFields();

fieldName= newString[fields.length];for ( int i = 0; i < fields.length; i++) {

fieldName[i]=fields[i].getName();

}

}catch(Exception e) {

e.printStackTrace();

}returnfieldName;

}

}

反射工具类 java_Java反射工具类相关推荐

  1. 天干地支 工具类java_java日期工具类DateUtil-续二

    该版本是一次较大的升级,农历相比公历复杂太多(真佩服古人的智慧),虽然有规律,但涉及到的取舍.近似的感念太多,况且本身的概念就已经很多了,我在网上也是查阅了很多的资料,虽然找到一些计算的方法,但都有些 ...

  2. 动态调用类 java_Java动态调用类中方法

    在Java中,调用类的方法有两种方式:对于静态方法可以直接使用类名调用,对于非静态方法必须使用类的对象调用.反射机制提供了比较另类的调用方式,可以根据需要指定要调用的方法,而不必在编程时确定.调用的方 ...

  3. a类怎么引用b类java_Java中A类的数组如何传入B类???急

    public class Test { public static void main(String[] args) { //方法一:引用传递 //创建A对象并给数组赋值 A a = new A(); ...

  4. golang利用反射写入excel的简单工具类

    golang利用反射写入excel的简单工具类 工具类源码 使用方法 工具类源码 package excelimport ("errors""github.com/tea ...

  5. java反射 获取方法_java反射之获取类的信息方法(推荐)

    本文接上文"老生常谈反射之class类的使用(必看篇)",以编写一个用来获取类的信息(成员函数.成员变量.构造函数)的工具类来讲解"反射之获取类的信息" 1.获 ...

  6. java学习笔记(十一)常用类、反射、垃圾回收

    常用类: System类代表当前java程序的运行平台,Runtime类代表当前java程序的运行时环境. String代表一个不可变的字符串,StringBuffer和Stringbulider代表 ...

  7. Go入门系列(十八) 反射、包和测试工具

    本系列文章目录 展开/收起 Go入门系列(一) 初识Go语言 Go入门系列(二) 变量.指针.数据类型简介和作用域 Go入门系列(三) 基础类型--整型.浮点型.布尔类型和字符串 Go入门系列(四) ...

  8. java 分析类_java--分析简单java类与反射的联系

    分析简单java类与反射的联系 web对反射的操作支持 在JSP之中有一种技术--javaBean.而且在jsp里面也配套有相应的操作方式,javaBean的核心在于简单java类,于是下面演示此操作 ...

  9. Python学习,元类type 反射 函数与方法 双下方法

    1.元类type type 获取对象从属于的类 python 中 一切皆对象, 类在某种意义上也是一个对象, python中自己定义的类, 以及大部分内置类, 都是由type元类(构建类)实例化得来的 ...

最新文章

  1. R语言使用ggplot2包的快速可视化函数qplot绘制散点图(设置数据点的形状、大小)实战
  2. 数论重大突破:120年后,希尔伯特的第12个数学难题借助计算机获得解决
  3. Atitit hsv转grb  应该优先使用hsv颜色原则 方便人类
  4. ListView条目中有CheckBox点击事件失效问题
  5. java蓝桥杯省赛第十届_2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)
  6. October CMS - 快速入门 1 安装
  7. Learning to rank 特征抽取
  8. SqlServer中保留小数的实现
  9. python车流量检测车流统计车辆计数yolov5 deepsort车流检测
  10. apple script to 1s screen capture snapshot w/ windowsill
  11. codeblocks13.12汉化
  12. CRC8校验算法总结
  13. 1330_硬件测试中的BCI测试
  14. [RK3399][Android7.1] 调试笔记 --- HDMI输出没有音频信号
  15. html之使用session进行服务器之间的跳转以及记录
  16. Qt:20---Containers控件的使用
  17. Solidity 投票案例
  18. 区块链学习——区块链的架构
  19. 服务器怎么买,腾讯云服务器购买三种流程介绍
  20. asr标注工具_BLASR:PacBio数据比对工具

热门文章

  1. HTML5中video标签与canvas绘图的使用
  2. sws_scale sws_getContext
  3. inconsistent use of tabs and spaces in indentation
  4. python caffe报错:No module named google
  5. pyqt5 QMainWindow 居中
  6. JUNIPER设备常用命令总结
  7. 渗透知识-linux基础命令
  8. matlab2018无法使用qcat,解决Matlab 2018a源代码的中文支持问题
  9. mysql 账号权限过期_Mysql用户忘记密码及密码过期问题的处理方法
  10. 计算机考研数据库原理真题,四川理工学院计算机学院数据库原理历年考研真题汇编.pdf...