为何Eclipse标记私有方法"参数隐藏字段"却不标记公有方法?
这是个挺常见的Eclipse代码检查细节问题,核心原因在于Eclipse的默认代码规则对不同访问权限的方法,在变量隐藏(shadowing)的判定上有差异化处理:
公有方法的特殊豁免
对于public修饰的方法(比如你的setRules),Eclipse默认认为这是对外暴露的API。按照JavaBean的设计习惯,很多setter方法的参数名会直接和类字段同名(比如setName(String name)对应private String name),这是非常普遍且合理的编码方式。为了避免对这种常规写法发出无意义的警告,Eclipse默认会跳过对公有方法参数隐藏字段的检查。私有方法的严格校验
而private修饰的replaceRules是类内部的实现细节,不属于对外API。Eclipse的规则认为,内部方法的参数如果和类字段同名,很容易在编码时引发混淆(比如不小心误用参数而非实例字段,或者反过来),而且私有方法没有API兼容性的顾虑,完全可以通过修改参数名(比如改成newRules)来避免这种混淆,所以默认会触发“参数隐藏字段”的警告。
如果你想调整这个行为,可以手动修改Eclipse的检查规则:
打开Window > Preferences > Java > Compiler > Errors/Warnings,找到Name shadowing and conflicts分类,里面可以针对“Parameter hides a field”设置不同的警告级别,甚至可以区分访问权限来定制规则。
内容的提问来源于stack exchange,提问作者Dave Mulligan

