方法的混淆重载¶
ID: java/confusing-method-signature
Kind: problem
Security severity:
Severity: recommendation
Precision: high
Tags:
- maintainability
- readability
- naming
Query suites:
- java-security-and-quality.qls
如果没有任何相应参数类型对实质上不同,则具有相同数量参数的重载方法声明可能会令人混淆。如果 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 方法调用表达式。