我可能会错过一些东西,但是声明一个 LinkedHashmap:
private final LinkedHashMap<anEnum, anInteger> linkedHashMap;
及之后:
linkedHashMap = new LinkedHashMap<anEnum, anInteger>();
结果:
“具有枚举值键的映射应替换为 EnumMap” (鱿鱼:1640)
由于不存在“LinkedEnumMap”,因此应忽略此声明。
事情是:使用 EnumMap 是很好的做法,因此 SonarQube 告诉你这样做。
但是您明确选择使用 LinkedHashMap - 它可以跟踪插入顺序。
因此该消息可以解释为:
换句话说:请记住,这些工具只是工具。他们提供信息来帮助您做出明智的决定。当您确定当前的实现很好时 - 那么不要更改您的代码,只是因为某些工具提出了这样的“建议”。
与枚举类型键一起使用的专用 Map 实现。所有的 枚举映射中的键必须来自单个枚举类型,即 创建地图时显式或隐式指定。枚举 映射在内部表示为数组。这个表示是 极其紧凑且高效。
基本上这不是一个错误,这是一个很好的推荐。每个
Enum
都有其来自声明顺序的顺序。您可以在 values()
返回的数组中看到它。
EnumMap
保持该顺序并将值实际存储在数组中。
另一方面,您可以决定哪个集合更适合您的目的。我相信将
EnumMap
和 List
组合起来可能会让您感兴趣,但请记住,声纳只是一个提示。您可以重新配置您的声纳并告诉它不要指示这种情况。
相关声纳规则的链接: 具有枚举值键的映射应使用 EnumMap 实现