//错误写法
Field field = detectionResults.getClass().getDeclaredField(rate);
field.setAccessible(true);
System.out.println(field.getClass());
double aDouble = field.getDouble(DetectionResults.class);
flag=flag&&(aDouble-0.00000000000001<detectionQuery.getUpper());
字段的类型是一个 Double 对象,而不是原始的 double 类型。在这种情况下,使用 field.getDouble() 方法会导致非法的数据类型转换。
使用 field.get() 方法来获取字段值,并在需要比较的时候将其转换为适当的类型
//更改后的代码
Field field = detectionResults.getClass().getDeclaredField(rate);
field.setAccessible(true);
System.out.println(field.getType());
Object fieldValue = field.get(detectionResults);
double v = ((Double) fieldValue).doubleValue();
flag = flag && (v - 0.00000000000001 < detectionQuery.getUpper());