背景:
根据开发需求,需要对封装后的对象属性进行判断,同时也利于接收对象的时候进行属性的判断,以此来实现开发的需求。
步骤:
首先是主要的功能函数撰写:其中GcgUtils就是我们的主要功能函数,
fname : 为属性的名称
ftype: 为属性的类型,就像代码中所写的,可以针对不同数据类型进行不同的业务处理。
@Component
public class PropertyFilterImp implements PropertyFilter {
public void GcgUtils(Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Field[] field = object.getClass().getDeclaredFields(); //获取实体类的所有属性,返回Field数组
for (int j = 0; j < field.length; j++) { //遍历所有属性
String fname = field[j].getName(); //获取属性名称
System.out.println("对象属性名称:" + fname);
fname = fname.substring(0, 1).toUpperCase() + fname.substring(1); //将属性的首字符大写,方便构造get,set方法
String ftype = field[j].getGenericType().toString(); //获取属性的类型
System.out.println(ftype);
if (ftype.equals("class java.lang.String")) { //如果ftype是类类型,则前面包含"class ",后面跟类名
Method m = object.getClass().getMethod("get" + fname);
String value = (String) m.invoke(object); //利用反射原理,调用getter方法获取属性值
if (value != null) {
//对属性值的操作逻辑(如改变编码)
System.out.println("对象属性的值 :" + value);
}
} else if (ftype.equals("int")) {
Method m = object.getClass().getMethod("get" + fname);
Integer value = (Integer) m.invoke(object); //利用反射原理,调用getter方法获取属性值
if (value != null) {
//对属性值的操作逻辑(如改变编码)
System.out.println("对象属性的值 :" + value);
}
}
}
}
}
其次就是测试函数: 针对测试函数,写了一个Book对象,如下所示:
@Test
void test3() {
Book book = new Book();
book.setId(2);
book.setName("gcg");
try {
propertyFilterImp.GcgUtils(book);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
最后就是测试结果:
对象属性名称:id
int
对象属性的值 :2
对象属性名称:Name
class java.lang.String
对象属性的值 :gcg