SONAR抱怨使封闭方法“静态”或删除此集合

2022-09-02 10:19:21

我的程序中有以下代码,并且我正在运行SonarQube 5,以便在将其与Maven集成后对其进行代码质量检查。

但是,Sonar要求使封闭方法“静态”或删除此集。该方法是setApplicationContext。

如何删除此错误?为什么会出现此错误?

public class SharedContext implements ApplicationContextAware {
public static final String REPORT_ENGINE_FACTORY = "reportEngineFactory";
private static ApplicationContext applicationContext;

public void setApplicationContext(ApplicationContext applicationContext)
        throws BeansException {
    SharedContext.applicationContext = applicationContext;
}

public static ApplicationContext getApplicationContext() {
    return applicationContext;
}

public Object getBean(String name) {
    return applicationContext.getBean(name);
} }

答案 1

具体来说,您似乎在询问规则 S2696,“实例方法不应写入'静态'字段'

如规则描述详细信息所示:

从非静态方法正确更新字段很难正确,并且如果有多个类实例和/或多个线程在起作用,则很容易导致错误。理想情况下,字段仅从方法更新。staticstaticsynchronized static

因此,问题是告诉您创建提出它的方法(大概是),以便在所有类实例中只有该方法的一个副本对(即在所有类实例之间共享)字段进行更新。它还建议创建该方法,以便一次只有一个实例可以调用该方法。setApplicationContextstaticstaticapplicationContextsynchronized

后期编辑:要查看规则说明,请单击“查看规则”或“...”。(取决于您的 SonarQube 版本)显示在问题消息之后。


答案 2

就其价值而言,我可能会因为这么说而被Sonar社区和Java宇宙列入黑名单,增加违规方法的顶部会导致Sonar完全忽略该警告。@SuppressWarnings("squid:S2696")


推荐