【发布时间】: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<T>)'
我应该将status 变量包装在String.valueOf() 中吗?但它不会给我在 Status 类中指定的所需 toString() 方法输出。有什么解决办法吗?
【问题讨论】:
-
什么是
LOGGER?答案将取决于您的日志记录类中可用的其他方法。此外,来自 sonarqube 的投诉应该有一个链接,指向它希望您如何编写代码的示例。