CodeQL 文档

方法的混淆重载

ID: java/confusing-method-signature
Kind: problem
Security severity: 
Severity: recommendation
Precision: high
Tags:
   - maintainability
   - readability
   - naming
Query suites:
   - java-security-and-quality.qls

单击以在 CodeQL 存储库中查看查询

如果没有任何相应参数类型对实质上不同,则具有相同数量参数的重载方法声明可能会令人混淆。如果 A 不能转换为 B,并且 B 不能转换为 A,则参数类型对 A 和 B 实质上不同。如果参数类型实质上不同,则程序员可能会认为当调用参数类型为 B 的方法时,调用了参数类型为 A 的方法。

建议

通常最好避免声明具有相同参数数量的重载方法,除非至少有一对相应的参数有实质性差异。

示例

声明重载方法 process(Object obj)process(String s) 会令人困惑,因为参数类型没有实质性差异。使用不同的名称声明方法会更清晰:processObject(Object obj)processString(String s)

相比之下,声明重载方法 process(Object obj, String s)process(String s, int i) 不会那么令人困惑,因为每个方法的第二个参数有实质性差异。

参考

  • J. Bloch,Effective Java(第二版),第 41 条。Addison-Wesley,2008 年。

  • Java 语言规范:15.12 方法调用表达式

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