需求
最近碰上这么一个需求:
一张表里面有一组数据的标准值(阀值),其余数据全是实际情况的具体值,现在要求如果实际情况的具体值大于了标准值,就要吧这条数据插入另一张表里面;
其实本质情况不就是对比两个对象中的全部属性值大小嘛
示例数据
实际数据展示:
标准值(阀值)展示
思路
因为要对比所有的属性值大小,首先要拿到单个属性,所以这块我们可以利用反射去做:
- 暴力反射拿到类中所有的值;(因为都是private修饰,所以必须得是暴力反射)
- 获取各个属性值的大小,然后作比较;(有个小细节,注意值的类型)
- 超过标准值(阀值),塞进另一张表。
代码
public void compareObject(Object obj1, Object obj2) throws Exception{
//确保是同一对象
if (obj1.getClass() == obj2.getClass()) {
// 获取所有属性
Field[] fs = obj1.getClass().getDeclaredFields();
//获取各个属性的值
for (Field field : fs) {
//true代表暴力反射,可以访问private修饰的东西,否则无法访问
field.setAccessible(true);
Object v1 = field.get(obj1);
Object v2 = field.get(obj2);
if(v1 instanceof Double && v1 instanceof Double){//值的类型
ifOverThreshold(field.getName(),v1, v2);
}
}
}
}
public void ifOverThreshold(String fieldName, Object obj1, Object obj2) throws Exception {
String message = "";
if((double)obj1 > (double)obj2){
message =fieldName + "数据超阈值";
System.out.println(message);
//超出阀值插入另一张表的操作
}else{
//符合标准值以下的操作
}
}