我的程序中有以下代码,在与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";
}
答案 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进行某些优化。