Я пытался использовать SnakeYaml для создания карты строк и объектов на Java.
Для хранения информации о человеке существует класс Person.java. Я хотел прочитать информацию о каждом человеке из файла yaml и сохранить ее на карте, где ключ представляет собой имя человека, а значение являющийся объектом Person. т.е. Для каждого имени человека должен быть создан и добавлен на карту объект человека.
РЕДАКТИРОВАТЬ: десериализация YAML должна создать 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 не может быть преобразован в Person
SnakeYaml не поддерживает этот тип десериализации? Любая помощь в том, почему возникает эта проблема и как ее можно решить, очень ценится.