アプリケーション開発で問題が発生しています。私の仕事は、人物オブジェクトのセットを含むサービスオブジェクトです。 personオブジェクトにはstudentとteacherという2つの派生オブジェクトがあります。このサービスオブジェクトは、クライアントからサーバにjson
オブジェクトとして取得しています。サーバー側ではservice.getPersonList()
メソッドを使用してサービスからList<Person>
オブジェクトを取得できます。しかし、私はPerson
の子クラスを取得することができません。私のコードは、このJavaの親から子オブジェクトを取得するには?
//人
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オブジェクトは、私は、typeプロパティを使用して子クラスを見つけようとしています。このよう
[{"year":"4","name":"sreenu","type":1},{"dept":"physics","name":"somehow","type":2}]
です。私は型の値が親オブジェクトを意味していますが、それから子をフェッチすることはできません。 どうすればこの問題を解決できますか?コントローラで
は、私はこの
//コントローラ パブリック文字列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());
}
}
}
のようなJSONオブジェクトを取得しています私は、クラスのキャスト例外を取得しています。私はオペレータのインスタンスでも試しました。