SonarQube:仅有条件地调用方法

Ole*_*ezt 17 java logging sonarqube

以下部分代码引发了SonarQube的一个主要错误:"仅有条件地调用方法."
我该如何解决这个问题?

if(us != null){
    logger.info("Log this: {}", us.toString());
}
Run Code Online (Sandbox Code Playgroud)

Tib*_*ssy 20

调用us.toString()是冗余的,toString()无论配置的日志级别如何,都将调用方法.你应该只us作为参数传递给info没有if声明.

logger.info("Log this: {}", us);
Run Code Online (Sandbox Code Playgroud)

  • 这个答案真的正确吗?就我而言,警告是通过在答案中使用相同的语法来引发的。 (2认同)

Ole*_*ezt 8

正如问题的评论所述,另一个有效的答案是:

if(logger.isInfoEnabled() && us != null){
    logger.info("Log this: {}", us.toString());
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。但这样做会增加认知复杂性......我选择禁用S2629。 (3认同)
  • 这很有帮助 (2认同)