SONAR抱怨将封闭方法设为"静态"或删除此设置

Awa*_*Awa 12 java performance spring static sonarqube

我在我的程序中有以下代码片段,并且在与Maven集成之后,我正在运行SonarQube 5以进行代码质量检查.

但是,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);
} }
Run Code Online (Sandbox Code Playgroud)

cce*_*ist 12

不管怎样,我可能会因为这样说而被 Sonar 社区和 Java Universe 列入黑名单,添加@SuppressWarnings("squid:S2696")到有问题的方法的顶部会导致 Sonar 完全忽略该警告。


G. *_*eam 10

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

正如规则描述细节:

正确地static从非静态方法更新字段是很难做到的,如果有多个类实例和/或多个线程在运行,很容易导致错误.理想情况下,static字段仅从synchronized static方法更新.

因此,问题在于告诉您创建它所引发的方法(大概setApplicationContext)static,以便在所有类实例中只有该方法的一个副本对static(即在所有类实例中共享)字段进行更新applicationContext.它还建议制作方法,synchronized以便一次只能调用一个实例.

  • 你不能让它静止.因为你违反了ApplicationContextAware的合同 (6认同)