【问题标题】:Sonar complaining about useless assignment of local variable声纳抱怨局部变量的无用分配
【发布时间】:2017-01-13 13:07:11
【问题描述】:

我的程序中有以下代码,在将其与 Maven 集成后,我正在运行 SonarQube 5 以对其进行代码质量检查。

然而,Sonar 要求 移除这个对局部变量“session”的无用赋值。

@RequestMapping(value = "/logoff", method = RequestMethod.GET)
public String getLogoffPage(HttpServletRequest request, HttpServletResponse response) {
    logger.info(" Before Log Offf........ " + request.getSession().getId() );
    HttpSession session =request.getSession(true);
    request.getSession().invalidate();
    myApplication.logout();
    SecurityContextHolder.clearContext();
    session=null;                   
    return "login";
}

【问题讨论】:

  • 您对session=null; 有什么期望?
  • 问题是??? (这个变量没有被使用,所以它确实是“无用的”。字面意思。)

标签: java spring maven controller sonarqube


【解决方案1】:

此变量是本地变量,因此当您到达 return 语句时,它将无法访问。由于在赋值后没有被读取,因此变量被认为是死的。

如果您将任何内容分配给局部变量并且不使用它,这是一条无用的指令,因此应该删除。

将变量设置为 null 几乎没有用,实际上可能会阻止 JVM 进行一些优化。

【讨论】:

    【解决方案2】:

    假设问题是“为什么”:

    你实际上做什么 session?什么都没有。

    HttpSession session =request.getSession(true);  // session assigned
    request.getSession().invalidate();         // session NOT used
    myApplication.logout();
    SecurityContextHolder.clearContext();
    session=null;                            // session re-assigned
    

    也许你是这个意思?

    HttpSession session =request.getSession(true);
    session.invalidate();
    myApplication.logout();
    SecurityContextHolder.clearContext();
    

    顺便说一句,我已经放弃了session = null,因为在 Java 中没有理由这样做(C 是另一回事)。

    当然,代码可以更简洁:

    request.getSession().invalidate();
    myApplication.logout();
    SecurityContextHolder.clearContext();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 2016-12-17
      • 2019-02-06
      • 2017-10-22
      • 2022-01-12
      相关资源
      最近更新 更多