我有一个带有私有构造函数的类和一个返回实例的静态方法,如下所示:
public class OptionsBean {
public static final OPTION1 = new OptionsBean(0, "COLOR");
public static final OPTION2 = new OptionsBean(1, "SIZE");
private OptionsBean(int id, String name) { ... }
public static OptionsBean valueOf(String name) {
if (name.equals("COLOR")) {
return OPTION1;
} else {
return OPTION2;
}
}
}
根类看起来像这样:
public class Root {
...
public OptionsBean getOptions() { ... }
public void setOptions(OptionsBean value} { ... }
...
}
我希望我的YAML看起来像这样:
name: Colored Box
options: COLOR
height: 100
width: 100
我知道我可以使用标签来获得我想要的东西,但我宁愿不必使用显式标签。
答案 0 :(得分:0)
我似乎已经解决了我自己的问题,虽然我不知道它是多么“正确”:
private static class MyConstructor extends Constructor {
public MyConstructor(Class<? extends Object> theRoot) {
super(theRoot);
this.yamlClassConstructors.put(NodeId.scalar, new ConstructCustom());
}
private class ConstructCustom extends ConstructScalar {
@Override
public Object construct(Node node) {
if (node.getType().equals(OptionsBean.getClass())) {
return OptionsBean.valueOf(node.getValue());
} else {
return super.construct(node);
}
}
}
}