2016-12-12 132 views
0

我有簡單的YAML文件:YAML自定義對象

object: 
    a: 1 
    b: 2 
    c: 3 

我能讀這個屬性自定義對象,其中包含一個構造函數只有1個說法。例如

public class CustomObject { 
     private String value; 

     public CustomObject(String value) { 
      .... 
     } 

     getValue ... 
     setValue ... 
    } 

其中值是屬性的結果級聯的a,b,c相掩模(如結果1:2/3)?

回答

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