CodeQL 文档

类型边界扩展最终类

ID: java/type-bound-extends-final
Kind: problem
Security severity: 
Severity: warning
Precision: medium
Tags:
   - maintainability
   - readability
   - types
Query suites:
   - java-security-and-quality.qls

点击查看 CodeQL 仓库中的查询

带有 extends 子句的类型通配符(例如 ? extends String)隐式地表明一个类型(在本例中为 String)具有子类。如果 extends 子句中的类型为 final,则代码会造成混淆,因为 final 类不能有任何子类。唯一满足 ? extends String 的类型是 String

建议

为了使代码更具可读性,请省略通配符,只保留最终类型。

示例

在以下示例中,通配符用于引用任何作为 String 子类的类型。

class Printer
{
	void print(List<? extends String> strings) {  // Unnecessary wildcard
		for (String s : strings)
			System.out.println(s);
	}
}

但是,由于 String 声明为 final,因此它没有子类。因此,将 ?&nbsp;extends&nbsp;String 替换为 String 会更清晰。

参考

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