(SonarQube)LinkedHashMap和S1640(告诉你使用EnumMap)

Tes*_*ter 1 java enums sonarqube sonarlint

我可能会错过一些东西,但是声明了LinkedHashmap:

private final LinkedHashMap<anEnum, anInteger> linkedHashMap;
Run Code Online (Sandbox Code Playgroud)

然后:

linkedHashMap = new LinkedHashMap<anEnum, anInteger>();
Run Code Online (Sandbox Code Playgroud)

结果是:

"使用枚举值的键映射应替换为EnumMap"(SQUID:1640)

由于没有"LinkedEnumMap",因此应忽略此声明.

Gho*_*ica 5

事情是:使用EnumMap是一种很好的做法,因此SonarQube会告诉您这样做.

但是你明确选择使用LinkedHashMap - 它跟踪插入顺序.

所以该消息可以解释为:

  • 当您只关心映射枚举时,请使用EnumMap
  • 当您需要映射枚举并关心插入顺序时,您必须使用普通的LinkedHashMap

换句话说:请记住,这些工具只是工具.他们提供信息以帮助您做出明智的决定.当你决定当前的实现是好的 - 那么不要改变你的代码,只是因为某些工具提出了这样的"建议".

  • 很对.对于一些人来说,声纳是一本圣经.但事实上并非如此.这是一个非常好的工具,但我们应该始终平衡产生的问题,因为它可能是无关紧要的. (2认同)