容器内容永远不会被访问¶
ID: java/unused-container
Kind: problem
Security severity:
Severity: error
Precision: very-high
Tags:
- maintainability
- useless-code
- external/cwe/cwe-561
Query suites:
- java-security-and-quality.qls
如果集合或映射的内容从未以任何方式被访问,那么它就是无用的,并且更新它的代码实际上是无效代码。通常,此类对象是从不完整的重构中遗留的,或者它们表示底层逻辑错误。
建议¶
如果集合/映射确实不必要,则将其删除,或者确保访问其元素。
示例¶
在以下示例代码中,reachable
方法确定树中的节点是否可从 ROOT
访问。它维护一个集合 reachableNodes
,其中包含所有先前发现可访问的节点。此集合很可能用作缓存,以避免虚假重新计算,但就目前情况而言,代码永远不会检查集合中是否包含任何节点。
private Set<Node> reachableNodes = new HashSet<Node>();
boolean reachable(Node n) {
boolean reachable;
if (n == ROOT)
reachable = true;
else
reachable = reachable(n.getParent());
if (reachable)
reachableNodes.add(n);
return reachable;
}
在对上述示例进行以下修改时,reachable
会检查缓存,以查看该节点是否已被考虑。
private Set<Node> reachableNodes = new HashSet<Node>();
boolean reachable(Node n) {
if (reachableNodes.contains(n))
return true;
boolean reachable;
if (n == ROOT)
reachable = true;
else
reachable = reachable(n.getParent());
if (reachable)
reachableNodes.add(n);
return reachable;
}