java工具类解读,java ClassUtil 反射工具类分析

常用java反射工具类

ppackage com.gentlesoft.ecm.sys;

import cn.hutool.core.util.ObjectUtil;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.math.BigDecimal;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Locale;

import java.util.Map;

public class ClassUtils {

/**

* 取对象全部属性名

*

* @param o 对象

* @return

*/

public static String[] getFiledName(Object o) {

Field[] fields = o.getClass().getDeclaredFields();

String[] fieldNames = new String[fields.length];

for (int i = 0; i < fields.length; i++) {

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

}

return fieldNames;

}

/**

* 根据属性名获取值

*

* @param fieldName

* @param o

* @return

*/

public static Object getFieldValueByName(String fieldName, Object o) {

try {

String firstLetter = fieldName.substring(0, 1).toUpperCase();

String getter = "get" + firstLetter + fieldName.substring(1);

Method method = o.getClass().getMethod(getter, new Class[]{});

Object value = method.invoke(o, new Object[]{});

return value;

} catch (Exception e) {

return null;

}

}

/**

* 根据属性名称和对象转化成对应的值

*

* @param bean 对象

* @param property 属性名称

* @param var 原始值

* @return

*/

public static Object convertValueByPropertyAndObjcet(Object bean, String property, Object var) {

try {

String value = var.toString();

Class> cls = bean.getClass();

Field field = cls.getDeclaredField(property);

String type = field.getType().getSimpleName();

if (null != type && !"".equals(type) && null != value && !"".equals(value)) {

if ("String".equals(type)) {

return value;

} else if ("Date".equals(type)) {

return parseDate(value);

} else if ("Integer".equals(type) || "int".equals(type)) {

return Integer.parseInt(value);

} else if ("Long".equalsIgnoreCase(type)) {

return Long.parseLong(value);

} else if ("Double".equalsIgnoreCase(type)) {

return Double.parseDouble(value);

} else if ("Boolean".equalsIgnoreCase(type)) {

return Boolean.parseBoolean(value);

} else {

return new NullPointerException("not supper type" + type);

}

} else {

return new NullPointerException("Object does not have this property:" + property);

}

} catch (Exception e) {

e.printStackTrace();

return e;

}

}

/**

* 为对象属性赋值

*

* @param bean 对象

* @param valMap map:键—属性名,值-属性值

*/

public static void setFieldValue(Object bean, Map valMap) {

Class> cls = bean.getClass();

// 取出bean里的所有方法

Method[] methods = cls.getDeclaredMethods();

Field[] fields = cls.getDeclaredFields();

for (Field field : fields) {

try {

String fieldSetName = parSetName(field.getName());

if (!valMap.containsKey(field.getName())) {

continue;

}

if (!checkSetMet(methods, fieldSetName)) {

continue;

}

Method fieldSetMet = cls.getMethod(fieldSetName, field.getType());

String value = valMap.get(field.getName());

if (null != value && !"".equals(value)) {

String fieldType = field.getType().getSimpleName();

setValue(fieldType, fieldSetMet, bean, value);

}

} catch (Exception e) {

continue;

}

}

}

/**

* 根据属性给对象赋值

*

* @param bean 对象

* @param fieldName 属性名

* @param var 值

*/

public static void setFieldValueByFieldName(Object bean, String fieldName, Object var) {

try {

boolean falg = null != var && !var.equals(null);

if (falg) {

Class> cls = bean.getClass();

Field field = cls.getDeclaredField(fieldName);

Method fieldSetMet = cls.getMethod(parSetName(fieldName), field.getType());

String fieldType = field.getType().getSimpleName();

if (null != fieldType && !"".equals(fieldType)) {

setValue(fieldType, fieldSetMet, bean, var);

} else {

new NullPointerException("Object does not have this property:" + fieldName);

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 格式化string为Date

*

* @param datestr

* @return date

*/

public static Date parseDate(String datestr) {

if (null == datestr || "".equals(datestr)) {

return null;

}

try {

String fmtstr = null;

if (datestr.indexOf(':') > 0) {

fmtstr = "yyyy-MM-dd HH:mm:ss";

} else {

fmtstr = "yyyy-MM-dd";

}

SimpleDateFormat sdf = new SimpleDateFormat(fmtstr, Locale.UK);

return sdf.parse(datestr);

} catch (Exception e) {

return null;

}

}

/**

* 日期转化为String

*

* @param date

* @return date string

*/

public static String fmtDate(Date date) {

if (null == date) {

return null;

}

try {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);

return sdf.format(date);

} catch (Exception e) {

return null;

}

}

/**

* 判断是否存在某属性的 set方法

*

* @param methods

* @param fieldSetMet

* @return boolean

*/

public static boolean checkSetMet(Method[] methods, String fieldSetMet) {

for (Method met : methods) {

if (fieldSetMet.equals(met.getName())) {

return true;

}

}

return false;

}

/**

* 判断是否存在某属性的 get方法

*

* @param methods

* @param fieldGetMet

* @return boolean

*/

public static boolean checkGetMet(Method[] methods, String fieldGetMet) {

for (Method met : methods) {

if (fieldGetMet.equals(met.getName())) {

return true;

}

}

return false;

}

/**

* 拼接某属性的 get方法

*

* @param fieldName

* @return String

*/

public static String parGetName(String fieldName) {

if (null == fieldName || "".equals(fieldName)) {

return null;

}

return "get" + fieldName.substring(0, 1).toUpperCase()

+ fieldName.substring(1);

}

/**

* 拼接在某属性的 set方法

*

* @param fieldName

* @return String

*/

public static String parSetName(String fieldName) {

if (null == fieldName || "".equals(fieldName)) {

return null;

}

return "set" + fieldName.substring(0, 1).toUpperCase()

+ fieldName.substring(1);

}

/**

* 根据属性字段类型设置属性值

*

* @param fieldType

* @param fieldSetMet

* @param bean

* @param var

*/

public static void setValue(String fieldType, Method fieldSetMet, Object bean, Object var) {

try {

switch (fieldType) {

case "String":

fieldSetMet.invoke(bean, var.toString());

break;

case "Date":

Date date = parseDate(var.toString());

fieldSetMet.invoke(bean, date);

break;

case "Integer":

Integer integerval = Integer.parseInt(var.toString());

fieldSetMet.invoke(bean, integerval);

break;

case "int":

Integer intval = Integer.parseInt(var.toString());

fieldSetMet.invoke(bean, intval);

break;

case "Long":

Long longval = Long.parseLong(var.toString());

fieldSetMet.invoke(bean, longval);

break;

case "Double":

Double doubleval = Double.parseDouble(var.toString());

fieldSetMet.invoke(bean, doubleval);

break;

case "Boolean":

Boolean booleanval = Boolean.parseBoolean(var.toString());

fieldSetMet.invoke(bean, booleanval);

break;

case "BigDecimal":

BigDecimal decimal = new BigDecimal(var.toString());

fieldSetMet.invoke(bean, decimal);

break;

case "Float":

Float flolt = Float.parseFloat(var.toString());

fieldSetMet.invoke(bean, flolt);

break;

default:

new NullPointerException("not supper type" + fieldType);

break;

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值