Sonar抱怨无用的局部变量赋值

时间:2016-09-06 07:18:25

标签: java spring maven controller sonarqube

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

但是,声纳要求将此无用的分配移至局部变量“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";
}

2 个答案:

答案 0 :(得分:11)

假设问题是"为什么":

您与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();

答案 1 :(得分:1)

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

如果您为局部变量分配任何内容并且没有使用它,那么这是一个无用的指令,因此应该删除。

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