gpt4 book ai didi

java - java中如何从父对象获取子对象?

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:51 24 4
gpt4 key购买 nike

我在应用程序开发中遇到麻烦。我的任务是我有一个包含一组人员对象的服务对象。 person 对象有两个派生对象,称为 Student 和 Teacher。我从客户端获取到服务器的此服务对象为 json目的。在服务器端我可以获得 List<Person>使用 service.getPersonList() 从服务中获取对象方法。但我无法获得 Person 的子类(class)。我的代码是这样的

//人

public class Person {

private String name;
private Integer type;

public static final Integer TYPE_STUDENT = 1 ;
public static final Integer TYPE_TEACHER = 2 ;

public Integer getType() {
return type;
}

public void setType(Integer type) {
this.type = type;
}

public String getName() {
return name;
}

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

}

//学生

public class Student extends Person{

private Integer year;

public Integer getYear() {
return year;
}

public void setYear(Integer year) {
this.year = year;
}
}

//老师

public class Teacher extends Person{

private String dept;

public String getDept() {
return dept;
}

public void setDept(String dept) {
this.dept = dept;
}
}

//服务

public class Service {

private List<Person> personList;

public List<Person> getPersonList() {
return personList;
}

public void setPersonList(List<Person> personList) {
this.personList = personList;
}
}

//我的json对象是这样的

[{"year":"4","name":"sreenu","type":1},{"dept":"physics","name":"somehow","type":2}]

我正在尝试使用类型属性来查找子类。我得到的类型值意味着父对象,但无法从中获取子对象。我怎么解决这个问题?

在 Controller 中我得到这样的 json 对象

// Controller 公共(public)字符串saveService(@RequestBody字符串服务){

List<Person> personList = (List<Person>) gson.fromJson(
data, new TypeToken<List<Person>>(){}.getType()
);
for(Person person : personList) {
if(person.getType() == Person.TYPE_STUDENT) {
Student student = (Student) person;
System.out.println(student.getYear());
}
if(person.getType() == Person.TYPE_TEACHER) {
Teacher teacher = (Teacher) teacher;
System.out.println(teacher.getDept());
}
}

}

我遇到了类转换异常。即使我尝试使用运算符实例。

最佳答案

您正在反序列化为更简单的类型(Person)而不是更复杂的类型(学生/教师)。这意味着附加的子类型信息(如年份或部门)将被丢弃。学生可以转换为人物,但人物不能转换为学生。

这反射(reflect)了一个设计问题。您要么需要更改 Person 类,以便它包含子类型所需的所有可能的数据,要么您需要在从 Json 创建对象之前将数据预先划分为教师和学生。

关于java - java中如何从父对象获取子对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40183330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com