我需要在 YAML 中转储一些复杂的 Java 对象列表。为了获得所需的结构,我首先将它们转换为嵌套列表和映射。所以它有点像:
- item 1
name : value
name : value
- another list
...
- item 2
...
或者在 Eclipse 调试器视图中 [...,...] 是一个列表, {name:value,name:value} 是一个映射,它看起来像 [{item1={name:value, name:value[{anotherlist} ]}项目2=...]。乱七八糟,但没那么长,也没那么难理解,就是乏味。
问题是这些块中有一些是可选的,所以我得到了一些空列表或空值:
- item 1
null : null
name : []
- item 2
and so on
这很混乱,无法再次读取。而且我无法检查更高级别的列表或地图之一,因为它们可能包含空列表、空地图或空值。我不想一遍又一遍地写 if (value != null && !value.isEmpty) 。正如我所看到的,我有 3 个选项:
- 我可以在技术上修改模板,但如果我不需要,我不想搞砸。之后我可以检查整个构造并取出所有空值和空构造。但是手动编写会很长而且嵌套和递归使用 if (value.isList) 和 if (value.isMap) 一直听起来也不是很好。
我可以写
private Map putUnlessNullOrEmpty(Map, Name, Value) private List addUnlessNullOrEmpty(List, Name, Value)
方法。这就是我所做的,但它看起来非常 unjavaish。
- 如果我可以将这些方法添加到该类中的列表和地图中,那就太好了。或覆盖/重载 put/add 方法。我可以编写单独的类(或内部类)来扩展通常的映射和列表,这只是另一种方法。但这听起来有点过分。
我对 Java 或一般编程还没有那么丰富的经验。你怎么看?