如何编写同时兼容ErrorProne与SonarQube的CommandLineRunner实现类?
问题:编写符合ErrorProne与SonarQube规范的CommandLineRunner实现类
需求
编写一个实现CommandLineRunner接口的public final class MyService类,同时满足ErrorProne和SonarQube的代码规范要求。
现有代码片段
public final class MyService implements CommandLineRunner { @Override public void run(final String... args) { doSomething(); } @Override public void run(final String[] args) { doSomething(); } }
尝试情况
- 仅保留
public void run(final String[] args)时:ErrorProne无告警,但SonarQube触发java:S923规则告警 - 仅保留
public void run(final String... args)时:SonarQube无告警,但ErrorProne触发Varargs doesn't agree for overridden method告警
疑问
是否存在更优的代码方案,能够同时满足两者的规范要求?
解决方案
可以通过针对性抑制单一工具的冲突规则,避免冗余重载方法,同时满足双方规范:
方案1:优先适配ErrorProne规则
保留数组参数的run方法,添加SonarQube规则的抑制注解:
public final class MyService implements CommandLineRunner { @Override @SuppressWarnings("squid:S923") public void run(final String[] args) { doSomething(); } private void doSomething() { // 业务逻辑实现 } }
方案2:优先适配SonarQube规则
保留可变参数的run方法,添加ErrorProne规则的抑制注解:
public final class MyService implements CommandLineRunner { @Override @SuppressWarnings("VarargsOverridesVarargs") public void run(final String... args) { doSomething(); } private void doSomething() { // 业务逻辑实现 } }
两种方案均能避免同时实现重载方法的冗余,可根据团队代码规范偏好选择。
内容的提问来源于stack exchange,提问作者PatPanda
相关产品推荐
相关产品推荐

