2013-12-10 38 views
-1

我有一個私人的構造和返回的情況下,像下面的靜態方法的類:如何使用靜態方法構建snakeyaml?

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

我似乎已經解決我自己的問題,雖然我不知道它是如何「正確」是:

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); 
      } 
     } 
    } 
}