如何获得在 json object 中传递的抽象 class 实现之一的 object
How to get object of one of the abstract class implementations passed in a json object
我有一个 spring 项目,其中我有一个摘要 class 人如下
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({@Type(value=Employee.class, name="employee"), @Type(value = Driver.class, name = "driver")})
public abstract class Person {
}
我有这个人 class、雇员和 Driver 的 2 个实现如下
@JsonTypeName("employee")
public class Employee extends Person {
private int field1;
private int field2;
//some getters and setters
}
@JsonTypeName("driver")
public class Driver extends Person {
private int field3;
private int field4;
private int field5;
//some getters and setters
}
人 object 包含在公司 class 中,如下所示
public class Company {
private String name;
private int id;
private Person person;// this is the object
private int people;
}
现在,我收到了 json 格式的请求,其中一个字段是这个人 object 如下:
{
"name": "some name",
"id": 123,
"person":{
"type": "employee"
"field1":"some field1 value",
"field2":"some field2 value"
},
"people": 100
}
事实是,此人可以是 driver 或员工类型。字段“type”(不作为变量出现)在 json 中传递,并且相应的 object 被实例化。但是,我无法掌握实例化的 object,因为实例化发生在运行时,而且我无法在代码中告诉实例化了哪个 class。因此无法调用适当的 object(employee or driver).
的 getter
有没有一种方法可以控制实例化的 object,这样我就可以对 object 的字段做任何我想做的事情(如果是 employee 和 field3,则为 field1 和 field2 , field4 和 field5 在 driver 的情况下),比如 company.getPerson().getField1();
提前致谢
如果 getField1()
是 Employee
的方法而不是任何 Person
的方法,那么不,你不能做 getPerson().getField1()
。
这就是逻辑。如果您在 Person
上调用 getField1()
,则意味着您知道此 Person
是 Employee
而不是 Driver
.
因此,您应该简单地将处理 Employee
的代码与处理 Driver
的代码分开:
Person person = company.getPerson();
if (person instanceof Employee) {
Employee employee = (Employee) person;
employee.getField1();
//...
} else if (person instanceof Driver) {
Driver driver = (Driver) person;
driver.getField3();
//...
}
我有一个 spring 项目,其中我有一个摘要 class 人如下
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({@Type(value=Employee.class, name="employee"), @Type(value = Driver.class, name = "driver")})
public abstract class Person {
}
我有这个人 class、雇员和 Driver 的 2 个实现如下
@JsonTypeName("employee")
public class Employee extends Person {
private int field1;
private int field2;
//some getters and setters
}
@JsonTypeName("driver")
public class Driver extends Person {
private int field3;
private int field4;
private int field5;
//some getters and setters
}
人 object 包含在公司 class 中,如下所示
public class Company {
private String name;
private int id;
private Person person;// this is the object
private int people;
}
现在,我收到了 json 格式的请求,其中一个字段是这个人 object 如下:
{
"name": "some name",
"id": 123,
"person":{
"type": "employee"
"field1":"some field1 value",
"field2":"some field2 value"
},
"people": 100
}
事实是,此人可以是 driver 或员工类型。字段“type”(不作为变量出现)在 json 中传递,并且相应的 object 被实例化。但是,我无法掌握实例化的 object,因为实例化发生在运行时,而且我无法在代码中告诉实例化了哪个 class。因此无法调用适当的 object(employee or driver).
的 getter有没有一种方法可以控制实例化的 object,这样我就可以对 object 的字段做任何我想做的事情(如果是 employee 和 field3,则为 field1 和 field2 , field4 和 field5 在 driver 的情况下),比如 company.getPerson().getField1();
提前致谢
如果 getField1()
是 Employee
的方法而不是任何 Person
的方法,那么不,你不能做 getPerson().getField1()
。
这就是逻辑。如果您在 Person
上调用 getField1()
,则意味着您知道此 Person
是 Employee
而不是 Driver
.
因此,您应该简单地将处理 Employee
的代码与处理 Driver
的代码分开:
Person person = company.getPerson();
if (person instanceof Employee) {
Employee employee = (Employee) person;
employee.getField1();
//...
} else if (person instanceof Driver) {
Driver driver = (Driver) person;
driver.getField3();
//...
}