容器内容从未初始化¶
ID: java/empty-container
Kind: problem
Security severity:
Severity: error
Precision: very-high
Tags:
- reliability
- maintainability
- useless-code
- external/cwe/cwe-561
Query suites:
- java-security-and-quality.qls
在已知为空的对象上调用查询集合或映射内容的方法(例如 containsKey
或 isEmpty
)。此类方法调用不会返回有意义的结果,并且可能表示代码缺失或逻辑错误。
建议¶
如果不需要集合/映射,请将其删除,或者确保它包含它应该包含的元素。
示例¶
以下示例代码迭代一个对象数组,以确定它是否包含重复元素。 它维护一个集合 seen
,该集合旨在包含遍历数组时到目前为止看到的所有元素。 如果当前元素已包含在该集合中,则该方法返回 true
,表示已找到重复项。
但是请注意,实际上从未向 seen
中添加任何元素,因此该方法始终返回 false
。
boolean containsDuplicates(Object[] array) {
java.util.Set<Object> seen = new java.util.HashSet<Object>();
for (Object o : array) {
if (seen.contains(o))
return true;
}
return false;
}
要解决此问题,应在循环体的末尾添加语句 seen.add(o);
,以确保正确维护 seen
。
参考¶
Java API 规范:Collection,Map。
常见弱点枚举:CWE-561。