java使用反射实现两对象对应字段计算
public static Object objectUtil(Object o1,Object o2) throws IllegalAccessException, InstantiationException {
int length = o1.getClass().getDeclaredFields().length;
Field[] o1fields = o1.getClass().getDeclaredFields();
Class<?> aClass = o1.getClass();
Object o3 = aClass.newInstance();
for (int i = 0;i<length;i++){
Field o1field = o1fields[i];
o1field.setAccessible(true);
String fieldName = o1field.getName();
try{
Method getValue = o1.getClass().getMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1));
Method setValue = o1.getClass().getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1),Integer.class);
Integer o1value = (Integer) getValue.invoke(o1);
Integer o2value = (Integer) getValue.invoke(o2);
if(o1value!=null&&o2value!=null){
setValue.invoke(o3,o1value+o2value);
}
} catch (NoSuchMethodException | InvocationTargetException e) {
e.printStackTrace();
}
}
return o3;
}
测试:`
Score u1 = new Score(1,2,3,4);
Score u2 = new Score(2,3,4,5);
Score u = (Score)ObjectUtil(u1, u2);
System.out.println(u);
输出:
Score{math=3, english=5, biology=7, chinese=9}