我有简单的YAML文件:
object:
a: 1
b: 2
c: 3
我可以将此属性读取到自定义对象,该对象包含仅带有1个参数的构造函数。例如
public class CustomObject {
private String value;
public CustomObject(String value) {
....
}
getValue ...
setValue ...
}
其中value是属性串联a,b,c和掩码的结果(结果1:2/3)?
答案 0 :(得分:1)
使用自定义构造函数和表示符可以实现:
class CustomObjectConstructor extends Constructor {
public CustomObjectConstructor() {
this.yamlConstructors.put(new Tag("!customObject"), new ConstructCustomObject());
}
private class ConstructCustomObject extends AbstractConstruct {
public Object construct(Node node) {
final Map<Object, Object> values = constructMapping(node);
final String a = (String) values.get("a");
final String b = (String) values.get("b");
final String c = (String) values.get("c");
return new CustomObject(a + ":" + b + "/" + c);
}
}
}
你可以像这样使用它:
Yaml yaml = new Yaml(new CustomObjectConstructor());
CustomObject myObject =
(CustomObject) yaml.load("!customObject\na: 1\nb: 2\nc: 3");
当然,这需要改进处理错误情况,但它显示了一般的想法。要将对象转储为映射,您可以在此处定义与代码类似的代表。有关详细信息,请参阅documentation。