我試圖使用SnakeYaml在Java中創建字符串和對象的映射。SnakeYaml - 將字符串和自定義對象映射到映射時發生ClassCastException
有一個Person.java類存儲有關人的信息。我想從一個YAML文件中讀取有關每個人的信息,並將其存儲在與鍵作爲人名和值作爲Person對象地圖。 即。對於每個人的名字,都必須創建一個人物並添加到地圖中。
編輯: 的YAML deserialisation應該創建一個Map<String, Person>
下面是每個文件的內容:
YAML文件:
PersonName1:
value1: foo1
value2: bar1
value3: foobar1
PersonName2:
value1: foo2
value2: bar2
value3: foobar2
Person.java
public class Person {
public String value1;
public String value2;
public String value3;
}
Main.java
public class Main {
public static void main(String[] args) throws FileNotFoundException {
InputStream inputStream = new FileInputStream(new File("SampleYamlFile.yml"));
Yaml yaml = new Yaml();
Map<String, Person> persons = (Map<String, Person>) yaml.load(inputStream);
for(String key : persons.keySet()) {
System.out.println("key = " + key);
Person person = persons.get(key);
System.out.println("person = " + person);
}
}
}
的地圖上被沒有任何錯誤產生。 關鍵也被打印。 但是,當我嘗試訪問該鍵的值,我得到一個ClassCastException異常
java.lang.ClassCastException:java.util.LinkedHashMap中不能轉換 以人
是這個SnakeYaml不支持的反序列化類型? 爲什麼會出現這個問題以及如何解決這個問題的任何幫助,非常感謝。
是的,這是正確的,它得到的那樣解碼。但我希望它被創建爲Map而不是Map >。我會在我的問題中明確地加上這個。 –
Balasubramanian
2014-10-19 12:50:33
我編輯了我的回覆,我添加了一個可以幫助你的鏈接 – ToYonos 2014-10-19 13:09:48