You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写同时兼容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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:18:13