Java YAML读取强制转换异常
我在读取文件时出错 线程“main”java.lang.ClassCastException中的异常:无法将java.lang.String转换为java.util.ArrayList 为什么没有发生?我正在使用YamlSnake库Java YAML读取强制转换异常,java,yaml,snakeyaml,Java,Yaml,Snakeyaml,我在读取文件时出错 线程“main”java.lang.ClassCastException中的异常:无法将java.lang.String转换为java.util.ArrayList 为什么没有发生?我正在使用YamlSnake库 Person.java: public class Person { int id; String fname; String lname; int age; public Person(int id, String fn
Person.java
:
public class Person
{
int id;
String fname;
String lname;
int age;
public Person(int id, String fname, String lname, int age)
{
this.id = id;
this.fname = fname;
this.lname = lname;
this.age = age;
}
}
@Override
public ArrayList<Person> Read() {
ArrayList<Person> pp = new ArrayList<Person>();
try
{
FileReader fr = new FileReader("d:\\Person.yml");
BufferedReader br = new BufferedReader(fr);
String str=br.readLine();
Yaml yml = new Yaml();
pp=(ArrayList<Person>) yml.load(str);
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pp;
}
yaml.java
:
public class Person
{
int id;
String fname;
String lname;
int age;
public Person(int id, String fname, String lname, int age)
{
this.id = id;
this.fname = fname;
this.lname = lname;
this.age = age;
}
}
@Override
public ArrayList<Person> Read() {
ArrayList<Person> pp = new ArrayList<Person>();
try
{
FileReader fr = new FileReader("d:\\Person.yml");
BufferedReader br = new BufferedReader(fr);
String str=br.readLine();
Yaml yml = new Yaml();
pp=(ArrayList<Person>) yml.load(str);
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pp;
}
您的YAML语法有错误。在块映射中,每行只允许一个键。另外,在
-
和:
之后必须有空格,才能将它们识别为YAML特殊字符。尝试:
- id: 2
fname: uu
lname: uu
age: 45
如果要将其保持在一行中,可以使用流程图:
- {id: 2, fname: uu, lname: uu, age: 45 }
第二个问题是类型擦除。您不能告诉SnakeYaml将YAML序列加载到ArrayList
中,因为在运行时,即使告诉SnakeYaml您想要一个ArrayList
,也无法确定泛型参数Person
。然而,SnakeYaml确实提供了克服这一限制的可能性——唉,它要求您更改YAML
让这成为你的YAML:
persons:
- id: 2
fname: uu
lname: uu
age:45
注意,我将一个YAML映射作为根元素,它只包含一个键persons
,其值是原始YAML
现在,在Java中,声明一个与此根元素匹配的类:
class Root {
List<Person> persons;
}
请注意上面代码中的错误,我没有对其进行测试。很难判断您的YAML是否有错误,或者这是否是由于在此处设置帖子格式方面缺乏经验所致。请查看其他帖子(您可以编辑并取消它们),以了解如何获得格式更好的帖子。我还建议你找一个更精通英语的人来复习你的课文。我更容易理解这篇文章,它有更好的机会得到高质量的答案。