/**
* 计算均值
* <p>
* Author YangXuyue
* Date 2019/4/8 10:18
*/
public class ReflectionTest {
@Test
public void test() {
Value v1 = new Value(BigDecimal.valueOf(4.0), BigDecimal.valueOf(9.0));
Value v2 = new Value(BigDecimal.valueOf(8.0), null);
List<Value> valueList = new ArrayList<Value>() {{
add(v1);
add(v2);
}};
System.out.println(calculateValue(valueList));
}
private Value calculateValue(List<Value> valueList) {
Value v = new Value(null, null);
Field[] fieldArray = v.getClass().getDeclaredFields();
Field tempField;
Object object, tempObject;
BigDecimal bigDecimal, tempBigDecimal;
for (Field field : fieldArray) {
try {
for (Value value : valueList) {
tempField = value.getClass().getDeclaredField(field.getName());
// 只针对BigDecimal类型的class
if (Objects.equals(tempField.getType(), BigDecimal.class)) {
tempField.setAccessible(true);
tempObject = tempField.get(value);
if (null != tempObject) {
field.setAccessible(true);
object = field.get(v);
if (null == object) {
field.set(v, tempObject);
} else {
bigDecimal = (BigDecimal) object;
tempBigDecimal = (BigDecimal) tempObject;
field.set(v, bigDecimal.add(tempBigDecimal));
}
}
}
}
int length = valueList.size();
field.setAccessible(true);
object = field.get(v);
if (object instanceof BigDecimal) {
bigDecimal = (BigDecimal) object;
bigDecimal = bigDecimal.divide(BigDecimal.valueOf(length), 2, BigDecimal.ROUND_HALF_UP);
field.set(v, bigDecimal);
}
} catch (Exception e) {
// ignored
}
}
return v;
}
public class Value {
private BigDecimal v1;
private BigDecimal v2;
public Value(BigDecimal v1, BigDecimal v2) {
this.v1 = v1;
this.v2 = v2;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
public BigDecimal getV1() {
return v1;
}
public void setV1(BigDecimal v1) {
this.v1 = v1;
}
public BigDecimal getV2() {
return v2;
}
public void setV2(BigDecimal v2) {
this.v2 = v2;
}
}
}