未使用的标签¶
ID: java/unused-label
Kind: problem
Security severity:
Severity: recommendation
Precision: high
Tags:
- maintainability
- useless-code
- external/cwe/cwe-561
Query suites:
- java-security-and-quality.qls
循环和 switch
语句可以加标签。这些标签可以作为 break
或 continue
语句的目标,以指定它们引用的循环或 switch
语句。
除了充当此类跳转目标外,标签对程序行为没有影响,这意味着使用未使用的标签很可疑。
建议¶
如果标签用于记录循环或 switch
语句的预期行为,请将其删除。最好使用注释来达到此目的。但是,未使用的标签可能表明某些内容出错:一些嵌套的 break
或 continue
语句应该使用该标签。在这种情况下,当前的控制流可能错误,您应该在检查所需行为后调整一些跳转以使用该标签。
示例¶
以下示例使用循环和嵌套循环来检查当前所有活动的购物车中是否包含某个特定商品。在第 4 行,carts:
标签未被使用。检查代码后,我们可以看到第 10 行的 break
语句效率低下,因为它只跳出嵌套循环。实际上,它可以跳出外层循环,这在常见情况下可以提高性能。通过将第 10 行的语句更改为 break carts;
,标签不再未被使用,我们也改进了代码。
public class WebStore {
public boolean itemIsBeingBought(Item item) {
boolean found = false;
carts: // AVOID: Unused label
for (int i = 0; i < carts.size(); i++) {
Cart cart = carts.get(i);
for (int j = 0; j < cart.numItems(); j++) {
if (item.equals(cart.getItem(j))) {
found = true;
break;
}
}
}
return found;
}
}
参考资料¶
帮助 - Eclipse 平台:Java 编译器错误/警告首选项.
常见弱点枚举:CWE-561.