类型边界扩展最终类¶
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 类.