介绍
Java的反射机制,可以让语言变得更加灵活,对对象的操作也更加“动态”,因此在某些情况下,反射可以做到事半功倍的效果。Hutool针对Java的反射机制做了工具化封装,封装包括:
- 获取构造方法
- 获取字段
- 获取字段值
- 获取方法
- 执行方法(对象方法和静态方法)
使用
获取实体中所有属性字段
// 获取实体中所有属性字段
Field[] fields = ReflectUtil.getFields(object.getClass());
获取字段类型和值
for (Field field : fields) {
// 获取属性字段类型
String canonicalName = field.getType().getCanonicalName();
// 获取字段值
Object fieldValue = ReflectUtil.getFieldValue(object, field);
}
获取某个类的所有方法
Method[] methods = ReflectUtil.getMethods(ExamInfoDict.class);
获取某个类的指定方法
Method method = ReflectUtil.getMethod(ExamInfoDict.class, "getId");
构造对象
ReflectUtil.newInstance(ExamInfoDict.class);
执行方法
class TestClass {
private int a;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}
TestClass testClass = new TestClass();
ReflectUtil.invoke(testClass, "setA", 10);
demo利用反射去除实体属性值中的空格和换行符
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
/**
* <pre>
* 去除数据中空格及换行
* </pre>
*/
public class TrimBeanUtil {
/**
* String类型 CanonicalName
*/
private static final String STRING_TYPE_NAME = "java.lang.String";
/**
* 去除实体中属性值空格及换行
* @param object 实体属性
*/
public static void trimData(Object object) {
// 获取实体中所有属性字段
Field[] fields = ReflectUtil.getFields(object.getClass());
for (Field field : fields) {
// 获取属性字段类型
String canonicalName = field.getType().getCanonicalName();
// 如果字段是String类型,则去除此字段数据的空格
if (STRING_TYPE_NAME.equals(canonicalName)) {
// 获取字段值
Object fieldValue = ReflectUtil.getFieldValue(object, field);
if (ObjectUtil.isNotEmpty(fieldValue)){
String fieldValueStr = String.valueOf(fieldValue);
if (StringUtils.isNotBlank(fieldValueStr)) {
// 去掉换行
String fieldValueStrNew = fieldValueStr.replaceAll("\r|\n", "");
// 将去除前中后的空格后的数据 替换 原数据
ReflectUtil.setFieldValue(object, field, fieldValueStrNew.replaceAll(" ", ""));
}
}
}
}
}
}