我的功能看起来像:
public static double isOverturn(final String reference, final String hypothesis, FieldType fieldType) {
double overturnScore = 1.0;
if (StringUtils.isEmpty(reference) || StringUtils.isEmpty(hypothesis))
return overturnScore;
Method comparisonMethod = null;
try {
comparisonMethod = comparison(fieldType.getName());
overturnScore = (double) comparisonMethod.invoke(null, reference, hypothesis);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return overturnScore;
}
我想用log.info代替e.printStackTrace。但这给了我错误。如何在静态方法中使用log.info?
最佳答案
只需将您的日志字段设为静态即可。无论如何,这是行业标准。
那是令人遗憾的错误处理。如果您的反射调用出了点问题,则此方法返回1.0。这似乎是非常愚蠢的行为。通常,如果您无法采取任何措施来正确处理它,就应该抛出异常(并且“记录并返回一些丢弃的默认值”很少是有效的“处理”策略!),因为这样做会导致长链异常或直接执行的代码做错了事情,因为正如他们所说的那样,在定义问题面前进行垃圾回收,垃圾回收并返回1.0肯定听起来像1.0只是垃圾,不是吗?
如果您打算完全忽略所有含义,将其分离到日志中并返回默认值,则可以捕获Exception。