【问题标题】:SonarQube: "Invoke method(s) only conditionally"SonarQube:“仅有条件地调用方法”
【发布时间】:2020-06-06 21:18:27
【问题描述】:

让我们考虑有一个来自第三方库的类Status,它实现了自己的toString()方法,如下所示:-

public class Status<T> extends AttemptStatus<T> {

    public String toString() {
        StringBuilder sb = new StringBuilder("Status{");
        sb.append("id=").append(this.id);
        sb.append(", startTime=").append(this.startTime);
        sb.append(", endTime=").append(this.endTime);
        .....
    }
}

我在我的代码中使用这个类,如下所示:-

public class ABC {

private <T> T executeWithRetries(Callable<T> callable, RetryConfig conf) {
    Status<T> status = new CallExecutorBuilder()
            .config(conf)
            .afterFailedTryListener(s -> {
                    LOGGER.warn("Connection failed. Retrying.");
                    MetricsUtil.REDIS_RETRIES_METER.mark();
                    this.redis = createConnection();
            })
            .build()
            .execute(callable);
    LOGGER.info(status.toString());
    return status.getResult();
}

现在 SonarQube 在下面这句话中抱怨 Invoke method(s) only conditionally:-

LOGGER.info(status.toString());

因此,如果我从上面的句子中删除toString(),那么编译器会按以下方式抱怨:-

 LOGGER.info(status);

Cannot resolve method 'info(com.evanlennick.retry4j.Status&lt;T&gt;)'

我应该将status 变量包装在String.valueOf() 中吗?但它不会给我在 Status 类中指定的所需 toString() 方法输出。有什么解决办法吗?

【问题讨论】:

  • 什么是LOGGER?答案将取决于您的日志记录类中可用的其他方法。此外,来自 sonarqube 的投诉应该有一个链接,指向它希望您如何编写代码的示例。

标签: java logging sonarqube


【解决方案1】:

怎么样:

LOGGER.info("{}",status);

【讨论】:

    【解决方案2】:

    status 是 java 记录。声纳警告与我在这里所做的无关。

    【讨论】:

      猜你喜欢
      • 2017-11-03
      • 2017-11-01
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 2020-07-03
      • 2017-02-14
      • 1970-01-01
      • 2015-07-11
      相关资源
      最近更新 更多