【问题标题】:Move the contents of this initializer to a standard constructor or to field initializers将此初始值设定项的内容移动到标准构造函数或字段初始值设定项
【发布时间】:2020-10-31 12:59:59
【问题描述】:

当我在我的 Eclipse IDE 中安装 Sonarlint 插件时,我在 Sonar Report 中遇到了上述(标题)主要问题。

代码是:

public class Demo
{
public static final Map<String, String> CARD_TYPES;

static
    {
        CARD_TYPES = new HashMap<String, String>()
        {
            {  //Move the contents of this initializer to a standard constructor or to field* initializers
                put("visa", "001");
                put("diner", "002");
            }
        };
    }
//..code goes here
}

查询是:在上面的静态块中究竟应该做什么,到 解决上述问题?

【问题讨论】:

    标签: java hashmap static-block


    【解决方案1】:

    您的代码示例似乎已针对这篇文章进行了更改?无法编译,因为 CARD_TYPES 没有在任何地方声明。在内联注释前面还有一个*,它不应该在那里。

    无论如何,您都可以在 SonarLint 报告中选择特定问题。 然后,您可以查看报告此问题的规则的详细信息。 这些描述还包含合规和不合规代码示例,以帮助您理解问题。在您的情况下,一个合规的解决方案将是。 基本上:直接在声明处初始化地图。然后使用类的静态上下文来访问和填充它,而不是地图的上下文。

    【讨论】:

    • “代码”作为屏幕截图发布,因为它是 SonarLint 插件为所选规则显示的屏幕。我在解释如何使用插件,没有给出任何示例代码。由于这解决了问题以及未来潜在的类似问题,因此提供的信息似乎更好。
    • 感谢您的回复@Basti。在静态块中使用内循环和分配 对有什么区别吗?与您在 code-sn-p (一般情况)中建议的内容相比。
    • @Sunil 您应该在单独的线程中提出这个问题。我很少使用它们,所以我不太了解它背后的机制,所以如果不先进行研究,我就没有信心回答这个问题。
    • @GhostCat 对屏幕阅读器来说很好。我会牢记这一点,以备将来之用。感谢您指出。
    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    相关资源
    最近更新 更多