SnakeYAML:如何使用TypeDescription使用Set加载Yaml?

时间:2018-12-18 05:22:08

标签: yaml snakeyaml

我在YAML中使用的Set与此类似:

# Explicitly typed set.
baseball players: !!set
  ? Mark McGwire
  ? Sammy Sosa
  ? Ken Griffey
# Flow style
baseball teams: !!set { Boston Red Sox, Detroit Tigers, New York Yankees }

在注册构造函数时如何将类型明确设置为Set?

TypeDescription仅允许我根据文档注册列表或地图: http://javadox.com/org.yaml/snakeyaml/1.13/org/yaml/snakeyaml/TypeDescription.html

 void   putListPropertyType(String property, Class<? extends Object> type)
          Specify that the property is a type-safe List.
 void   putMapPropertyType(String property, Class<? extends Object> key, Class<? extends Object> value)
          Specify that the property is a type-safe Map.

由于这个原因,我最终将我的集合转换为列表。

1 个答案:

答案 0 :(得分:0)

最终弄清楚了这一点。 YAML集是具有空值的地图。因此,我最终将数据模型定义为具有Set成员,然后使用putMapPropertyType API来注册绑定。

Class Config {
   Set<String> players;
}


// in the YAML parsing code block :
typeDef.putMapPropertyType("players", String.class, Object.class /* Value type doesnt matter */ );

希望这会有所帮助。