类型边界扩展最终类¶
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
带有 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,因此它没有子类。因此,将 ? extends String 替换为 String 会更清晰。
参考¶
帮助 - Eclipse 平台:Java 编译器错误/警告首选项.
Java 语言规范:4.5.1 参数化类型的类型参数,8.1.1.2 final 类.