我的功能看起来像:

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。

10-04 18:35