CodeQL 文档

未使用的标签

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

点击查看 CodeQL 代码库中的查询

循环和 switch 语句可以加标签。这些标签可以作为 breakcontinue 语句的目标,以指定它们引用的循环或 switch 语句。

除了充当此类跳转目标外,标签对程序行为没有影响,这意味着使用未使用的标签很可疑。

建议

如果标签用于记录循环或 switch 语句的预期行为,请将其删除。最好使用注释来达到此目的。但是,未使用的标签可能表明某些内容出错:一些嵌套的 breakcontinue 语句应该使用该标签。在这种情况下,当前的控制流可能错误,您应该在检查所需行为后调整一些跳转以使用该标签。

示例

以下示例使用循环和嵌套循环来检查当前所有活动的购物车中是否包含某个特定商品。在第 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;
	}
}

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私