前言
<<Java开发工具类>>是新开的一篇笔记系列,趁着现在有空了,把之前一年多工作,为了方便生产开发写的工具类给记一记并分享出来,如果有更好用的办法,欢迎随时在评论区提供见解,后续更新会贴上这些工具类的GitHub地址。
反射工具类
本工具类主要是针对了使用字段名来调用实体类为目的编写,就好比,前端经常会通过对象的属性名传输不同的内容给后端,但一般情况下,这个字段的数量有可能是多变的,也有可能是并非每一次都是同一个属性,当前批次可能只需要读出属性1的值,下一次便有可能是给属性2注入值。
代码
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import a.a.a.T;
import weblogic.deploy.beans.factory.InvalidTargetException;
public class ColInvoke {
private ColInvoke(){
}
/**
* get
*@param beanObj 实体类
*@param colName 要调用get的属性名
*@return 调用invoke
* @throws IntrospectionException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws IllegalArgumentException
* */
public static Object getProperty(Object beanObj,String colName)throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
Method[] m = beanObj.getClass().getMethods();
for(int i=0;i<m.length;i++){
if(("get"+colName).toLowerCase().equals(m[i].getName().toLowerCase())){
return m[i].invoke(beanObj);
}
}
return null;
}
/**
* set
*@param beanObj 实体类
*@param colName 要调用set的属性名
*@param value
* @throws NoSuchMethodException
* @throws SecurityException
* */
public static void setProperty(Object beanObj,Class<?>clazz,String colName,Class<?> typeClass,Object value)throws IllegalArgumentException,IllegalAccessException,InvocationTargetException, IntrospectionException, SecurityException, NoSuchMethodException{
colName = removeLine(colName);
String methodName ="set"+colName.substring(0, 1).toUpperCase()+colName.substring(1);
Method method = clazz.getDeclaredMethod(methodName, new Class[]{
typeClass});
method.invoke(beanObj, new Object[]{
getClassTypeValue(typeClass,value)});
}
public static void roundingOffPoJo(Object obj) throws IllegalArgumentException, IllegalAccessException<