当我应用默认的
google-checkstyle.xml
格式时,会出现以下警告:
Map<String, Object> payment = new LinkedHashMap<>() {{
put("customer_number", "123456");
}};
“block”子级的缩进级别 12 不正确,预期级别 应为以下之一:16, 20。(169:13) [缩进]
这是因为 checkstyle 需要以下格式:
Map<String, Object> payment = new LinkedHashMap<>() {{
put("customer_number", "123456");
}};
但我更喜欢我的自定义格式。我如何在 checkstyle 中更改它? 错误来自定义:
<module name="Indentation">
<property name="basicOffset" value="4"/>
....
</module>
但我无法更改此设置,因为
basicOffset
也适用于所有其他线路。
问题:是否有可能以某种方式从该检查中排除带双括号的静态初始化映射?就像
new LinkedHashMap<>() {{
。
如果您不关心顺序,只需使用
Map.of
就像 Joachim Sauer 在他的评论中已经建议的那样。
如果需要插入顺序,可以使用以下代替匿名子类:
Map<String, Object> payment = List.of(
// add as many entries as necessary
entry("customer_number", "123456"))
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(v1, v2) -> v1, // unused because the map keys will be unique
LinkedHashMap::new))
这看起来确实很奇怪,使用
List<Map.Entry<String, Object>>
作为中间对象,并且 toMap
需要从未使用过的合并函数,但它完成了工作。