当前位置: 首页 > 知识库问答 >
问题:

声纳抱怨将封闭方法设置为“静态”或移除此集合

越雨泽
2023-03-14

我有以下一段代码在我的程序,我正在运行SonarQube 5的代码质量检查后,它与Maven集成。

然而,声纳要求将封闭方法设置为“静态”或移除这一组。方法是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);
} }

共有3个答案

鄢禄
2023-03-14

这对我有用。

@Setter
private static volatile ApplicationContext context;

@Override
public void setApplicationContext(ApplicationContext ac) throws BeansException {
    setContext(ac);
}
卞嘉许
2023-03-14

无论如何,我可能会被Sonar社区和Java世界列入黑名单,因为我这么说,在有问题的方法顶部添加@SuppressWarnings(“squid:S2696”)会导致Sonar完全忽略该警告。

昌乐生
2023-03-14

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

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

从非静态方法正确更新静态字段很难做到正确,如果存在多个类实例和/或多个线程,则很容易导致错误。理想情况下,静态字段仅从同步静态方法更新。

因此,问题是告诉您使提出它的方法(可能是setApplicationContextstatic,这样在所有类实例中,只有一个方法的副本更新static(即在所有类实例中共享)字段applicationContext。它还建议将方法同步化,以便一次只有一个实例可以调用该方法

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

 类似资料:
  • 在将SonarQube与Maven集成后,运行SonarQube进行代码质量检查时,我有以下代码。 然而,Sonar抱怨说,我应该记录或者重播这个异常。 我错过了什么?谁能帮我一下吗。

  • 问题内容: 如果我在finally块中将其关闭,为什么Jenkins的SonarQube插件会抱怨open语句? (我需要在单独的函数中验证数据库连接。) 问题答案: 我已经按照@TT的建议以这种方式重构了代码,而声纳 不再抱怨 。 没有“ try-with-resource”,代码可以按以下方式重构,但是在这种情况下,Sonar 仍然抱怨 :

  • 问题内容: 此代码示例 违反了声纳法规则: 尽可能用方法引用替换lambda 是声纳虫吗?还是我真的可以使用方法参考? 问题答案: 您不能在不更改语义的情况下用方法引用替换lambda 。 方法引用替换 单个 方法调用,因此它不能简单地替换包含多个方法调用的lambda表达式。 形式的lambda表达式可以被替换为,当且仅当的评估时间无关紧要,因为在lambda形式中,在每个lambda主体评估中

  • 问题内容: 我的程序中包含以下代码,并将其与Maven集成后,我正在运行SonarQube 5以对其进行代码质量检查。 但是,Sonar抱怨我应该 记录或重新抛出此异常 。 我在这里想念什么?我还没有记录异常吗? 问题答案: 您应该这样做: 声纳不应该再打扰您了

  • 我有以下一段代码在我的程序,我正在运行SonarQube 5的代码质量检查后,它与Maven集成。 然而,Sonar要求删除这个对局部变量“session”的无用赋值。

  • 我的程序中有下面的代码,在与Maven集成后,我正在运行SonarQube 5进行代码质量检查。 然而,Sonar抱怨说,我应该记录或者重播这个异常。 我错过了什么?