在下面的第5行,Sonar代码分析显示问题"Dead store to eventList in",如何通过我的代码解决这个问题?
Sonar代码分析表示:此指令为局部变量分配一个值,但该值不会在任何后续指令中读取或使用。通常,这表示错误,因为从未使用过计算的值。请注意,Sun的javac编译器经常为最终的局部变量生成死存储。因为SpotBugs是一个基于字节码的工具,所以没有简单的方法来消除这些误报。
@GetMapping(path = Constants.GET_REPORT, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map> getReport(@PathVariable(required = false) String keyword) {
HashMap<Object, Object> sitesMap = new LinkedHashMap<>();
try {
List<EventV1> myList = new ArrayList<EventV1>(); // <<------------problem here (Dead store to myList in..)
if (keyword != null && !keyword.equalsIgnoreCase("null")) {// search of the keyword
myList = eventService.getBySearch(keyword);
} else {
myList = eventService.getSomething();
}
if (myList != null && myList.size() > 0) {
LOGGER.info("-size of the all events" + myList.size());
sitesMap.put(Constants.SUCCESS, true);
sitesMap.put(Constants.SIZE, myList.size());
sitesMap.put("mylist", myList);
return new ResponseEntity<Map>(sitesMap, HttpStatus.OK);
} else {
sitesMap.put(Constants.SUCCESS, false);
sitesMap.put("size", 0);
sitesMap.put("mylist", null);
return new ResponseEntity<Map>(sitesMap, HttpStatus.NO_CONTENT);
}
} catch (Exception exc) {
throw new ResponseStatusException(HttpStatus.EXPECTATION_FAILED, REGISTER_FAIL_MSG, exc);
}
}
这是因为您创建了不必要的ArrayList
对象。只需更换:
List<EventV1> myList = new ArrayList<EventV1>();
^^^^^^^^^^^^^^^^^^^^^^^^
if (keyword != null && !keyword.equalsIgnoreCase("null")) {
myList = eventService.getBySearch(keyword);
} else {
myList = eventService.getSomething();
}
带有
List<EventV1> myList;
if (keyword != null && !keyword.equalsIgnoreCase("null")) {
myList = eventService.getBySearch(keyword);
} else {
myList = eventService.getSomething();
}
您可以在声明期间将myList
赋值为null。将其分配给new ArrayList<EventV1>()
是无用的,因为它无论如何都是从方法调用eventService.getBySearch(keyword)
或eventService.getSomething()
中获取结果。您基本上为new ArrayList<EventV1>()
分配了一些内存,但立即取消了对它的引用,从而浪费了一些宝贵的内存。