首页 > 解决方案 > 地图获取方式> 从 yaml 使用snakeyaml

问题描述

尝试从 yaml 加载数据并创建以下对象:

问题:无法将 yaml 映射到对象,当我尝试它时总是抛出异常:java.util.LinkedHashMap 无法转换为 com.heraizen.DataConfig$Data

Map<String,List<Data>> map;

代码片段:

public class DataConfig {
private Map<String, List<Data>> heros = new HashMap<String, List<Data>>();

public static class Data {
    private String name;
    private String uri;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }

    @Override
    public String toString() {
        return "Data [name=" + name + ", uri=" + uri + "]";
    }

}

public Map<String, List<Data>> getHeros() {
    return heros;
}

public void setHeros(Map<String, List<Data>> heros) {
    this.heros = heros;
}

yaml:

  --- 
 heros: 
   one:

     - name: h1
       url: hu2
     - name: h2
       url: hu22
  two: 
    - name: h3
      url: hu3

构造对象:

   Yaml yaml = new Yaml(new Constructor(DataConfig.class));

   DataConfig retValue = (DataConfig) yaml.load(new FileInputStream("one.yaml"));
   retValue.getHeros().entrySet().forEach(ele->{
       System.out.println(ele.getKey()+" "+ele.getValue().get(0).getName());
   });
    System.out.println(retValue);

标签: javasnakeyaml

解决方案


由于DataConfig不是 的子类型或超类型LinkedHashMap,因此不能在此处使用强制转换。我不熟悉 yaml,但我可以假设该方法从您的异常描述中yaml.load()返回 a 。LinkedHashMap

尝试编写一个属于DataConfig将 a 转换为LinkedHashMapa的静态方法DataConfig

public static DataConfig parseNew(LinkedHashMap map) {

}

推荐阅读