反射工具类 java_Java反射工具类
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反射工具类相关推荐
- 天干地支 工具类java_java日期工具类DateUtil-续二
该版本是一次较大的升级,农历相比公历复杂太多(真佩服古人的智慧),虽然有规律,但涉及到的取舍.近似的感念太多,况且本身的概念就已经很多了,我在网上也是查阅了很多的资料,虽然找到一些计算的方法,但都有些 ...
- 动态调用类 java_Java动态调用类中方法
在Java中,调用类的方法有两种方式:对于静态方法可以直接使用类名调用,对于非静态方法必须使用类的对象调用.反射机制提供了比较另类的调用方式,可以根据需要指定要调用的方法,而不必在编程时确定.调用的方 ...
- a类怎么引用b类java_Java中A类的数组如何传入B类???急
public class Test { public static void main(String[] args) { //方法一:引用传递 //创建A对象并给数组赋值 A a = new A(); ...
- golang利用反射写入excel的简单工具类
golang利用反射写入excel的简单工具类 工具类源码 使用方法 工具类源码 package excelimport ("errors""github.com/tea ...
- java反射 获取方法_java反射之获取类的信息方法(推荐)
本文接上文"老生常谈反射之class类的使用(必看篇)",以编写一个用来获取类的信息(成员函数.成员变量.构造函数)的工具类来讲解"反射之获取类的信息" 1.获 ...
- java学习笔记(十一)常用类、反射、垃圾回收
常用类: System类代表当前java程序的运行平台,Runtime类代表当前java程序的运行时环境. String代表一个不可变的字符串,StringBuffer和Stringbulider代表 ...
- Go入门系列(十八) 反射、包和测试工具
本系列文章目录 展开/收起 Go入门系列(一) 初识Go语言 Go入门系列(二) 变量.指针.数据类型简介和作用域 Go入门系列(三) 基础类型--整型.浮点型.布尔类型和字符串 Go入门系列(四) ...
- java 分析类_java--分析简单java类与反射的联系
分析简单java类与反射的联系 web对反射的操作支持 在JSP之中有一种技术--javaBean.而且在jsp里面也配套有相应的操作方式,javaBean的核心在于简单java类,于是下面演示此操作 ...
- Python学习,元类type 反射 函数与方法 双下方法
1.元类type type 获取对象从属于的类 python 中 一切皆对象, 类在某种意义上也是一个对象, python中自己定义的类, 以及大部分内置类, 都是由type元类(构建类)实例化得来的 ...
最新文章
- R语言使用ggplot2包的快速可视化函数qplot绘制散点图(设置数据点的形状、大小)实战
- 数论重大突破:120年后,希尔伯特的第12个数学难题借助计算机获得解决
- Atitit hsv转grb 应该优先使用hsv颜色原则 方便人类
- ListView条目中有CheckBox点击事件失效问题
- java蓝桥杯省赛第十届_2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)
- October CMS - 快速入门 1 安装
- Learning to rank 特征抽取
- SqlServer中保留小数的实现
- python车流量检测车流统计车辆计数yolov5 deepsort车流检测
- apple script to 1s screen capture snapshot w/ windowsill
- codeblocks13.12汉化
- CRC8校验算法总结
- 1330_硬件测试中的BCI测试
- [RK3399][Android7.1] 调试笔记 --- HDMI输出没有音频信号
- html之使用session进行服务器之间的跳转以及记录
- Qt:20---Containers控件的使用
- Solidity 投票案例
- 区块链学习——区块链的架构
- 服务器怎么买,腾讯云服务器购买三种流程介绍
- asr标注工具_BLASR:PacBio数据比对工具
热门文章
- HTML5中video标签与canvas绘图的使用
- sws_scale sws_getContext
- inconsistent use of tabs and spaces in indentation
- python caffe报错:No module named google
- pyqt5 QMainWindow 居中
- JUNIPER设备常用命令总结
- 渗透知识-linux基础命令
- matlab2018无法使用qcat,解决Matlab 2018a源代码的中文支持问题
- mysql 账号权限过期_Mysql用户忘记密码及密码过期问题的处理方法
- 计算机考研数据库原理真题,四川理工学院计算机学院数据库原理历年考研真题汇编.pdf...