ClassUtil 通过属性名反射获取get和set方法
  TEZNKK3IfmPf 2023年11月12日 77 0
edn
/**
* @author BNTang
* @version 1.0
* @date Created in 2021/10/20 020 15:53
* @description 通过 class 操作 obj 的 get/set util(通过属性名反射获取get和set方法)
**/
@UtilityClass
public class ClassUtil {
/**
* 根据属性名称,获取get方法
*
* @param obj 对象
* @param name 属性名
* @return {@link Object}
* @throws Exception 异常
*/
public Object getGetMethod(Object obj, String name) throws Exception {
Method[] methods = obj.getClass().getMethods();
for (Method method : methods) {
if (("get" + name).equalsIgnoreCase(method.getName())) {
return method.invoke(obj);
}
}
return null;
}

/**
* 根据属性名称,拿到set方法,并把值set到对象中
*
* @param obj 对象
* @param clazz 字节码
* @param filedName 属性名称
* @param typeClass 字节码类型
* @param value 需要设置的值
*/
public void setValue(Object obj, Class<?> clazz, String filedName, Class<?> typeClass, Object value) {
filedName = removeLine(filedName);
String methodName = "set" + filedName.substring(0, 1).toUpperCase() + filedName.substring(1);
try {
Method method = clazz.getDeclaredMethod(methodName, typeClass);
method.invoke(obj, getClassTypeValue(typeClass, value));
} catch (Exception ex) {
ex.printStackTrace();
}
}

/**
* 通过class类型获取获取对应类型的值
*
* @param typeClass 字节码类型
* @param value 值
* @return {@link Object}
*/
private Object getClassTypeValue(Class<?> typeClass, Object value) {
if (typeClass == int.class || value instanceof Integer) {
if (null == value) {
return 0;
}
return value;
} else if (typeClass == short.class) {
if (null == value) {
return 0;
}
return value;
} else if (typeClass == byte.class) {
if (null == value) {
return 0;
}
return value;
} else if (typeClass == double.class) {
if (null == value) {
return 0;
}
return value;
} else if (typeClass == long.class) {
if (null == value) {
return 0;
}
return value;
} else if (typeClass == String.class) {
if (null == value) {
return "";
}
return value;
} else if (typeClass == boolean.class) {
if (null == value) {
return true;
}
return value;
} else if (typeClass == BigDecimal.class) {
if (null == value) {
return new BigDecimal(0);
}
return new BigDecimal(value + "");
} else {
return typeClass.cast(value);
}
}

/**
* 处理字符串,如:abc_dex ---> abcDex
*
* @param str 字符串
* @return {@link String}
*/
public String removeLine(String str) {
if (null != str && str.contains("_")) {
int i = str.indexOf("_");
char ch = str.charAt(i + 1);
char newCh = (ch + "").substring(0, 1).toUpperCase().toCharArray()[0];
String newStr = str.replace(str.charAt(i + 1), newCh);
return newStr.replace("_", "");
}
return str;
}
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: 异常处理机制 下一篇: Promise-race方法实现
  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
TEZNKK3IfmPf