我有一个spring项目,其中我有一个抽象类人物,如下所示
@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 {
}
我有这个Person类的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
}
Person对象包含在Company类中,如下所示
public class Company {
private String name;
private int id;
private Person person;// this is the object
private int people;
}
现在,我收到json格式的请求,其中一个字段是这个person对象,如下所示:
{
"name": "some name",
"id": 123,
"person":{
"type": "employee"
"field1":"some field1 value",
"field2":"some field2 value"
},
"people": 100
}
问题是,这个人既可以是司机也可以是员工。字段“type”(不作为变量出现)在json中传递,并实例化相应的对象。然而,我无法获得实例化对象,因为实例化发生在运行时,并且我无法在代码中分辨实例化了哪个类。因此无法调用相应对象(employee或driver)的getter。
有没有一种方法可以让我得到实例化对象的控制,这样我就可以对对象的字段做任何我想做的事情(在员工和字段3的情况下是字段1和字段2,在驱动程序的情况下是字段4和字段5),比如company.getPerson(). getField1();
提前谢谢
如果getField1()
是Employee
的一种方法,而不是任何Person
的方法,那么不,您不能执行getPerson()。getField1()
。
这就是逻辑。如果你在一个人
上调用getField1()
,那就意味着你知道这个人
是一个员工
而不是司机
。
因此,您应该简单地将处理员工
的代码与处理驱动程序
的代码分开:
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();
//...
}
我通过学校为一项任务提供的简报创建了一个飞机座位预订系统。我遇到了一个我无法解决的主要问题。 摘要说明抽象类必须有一个抽象方法和大约4个公共方法。在抽象类的两个子类中,我们都必须初始化对象数组(所有普通的座位)。然而,一旦它们被初始化,我不知道如何将它们发送回抽象类(该类有一个检查未预订的飞机座位的方法,这就是我需要初始化的座位对象的地方) ArrayIndexOutOfBounds在一个应该在边
问题内容: 在viewmodel对象中,以下是属性: 在VIEW中,javascript如下: 请在这里指导,我如何在javascript中获取JSON对象。 问题答案: 您可以使用以下内容: 这将输出以下内容(没有看到您的模型,我仅包含一个字段): 工作小提琴 AspNetCore AspNetCore使用的接口 MVC 5/6 您可以为此使用Newtonsoft: 这使您可以更好地控制json
问题内容: 我正在考虑我的应用程序的解决方案。这是一种情况:我有一个类,该类的方法将ObjectA作为输入参数并调用几个小方法,这些方法中的每个方法都需要ObjectA的某些部分(它们不重叠,即需求和,需求等等)。 …)现在的问题是:鉴于一般的良好代码实践和性能,将ObjectA传递给这些方法中的每一个方法更好,以便它们可以自己提取所需的值,还是仅传递它们的值更好?我的意思是: 要么 感谢您的任何
问题内容: 我有两节课。和。 我有一个要在中使用的功能。我当时正在考虑将的引用传递给的构造函数,然后再调用该函数。 那行得通吗?有人可以给我举个例子吗? 提前致谢! 问题答案: 是的,它将起作用。这是一种不错的方法。您只需传递A类的 实例 : 然后您可以拥有:
问题内容: 这是我要在这里实现的目标: 从数据库获取文件名和ID的列表 在网络路径上搜索这些文件 存储未找到的文件的任何ID 在第二个数据库中搜索该ID 在网络路径上搜索这些文件 列出所有在两个位置均未找到文件的ID。 我遇到的问题是尝试使用我收集的结果中的文件名。 运行代码时,会显示从数据库收集的原始JSON数据,但是当尝试仅列出文件名时,我什么也没得到(甚至没有错误) 关于如何解决此问题并以一
假设我有这门课: 以及子类: 我知道这是不可能的,但我想你明白我想要什么。如果Foobar实现了Cloneable,并且没有扩展AbstractFoo,那么子类就可以工作。我想我想要但不允许的是: 如果Foobar实现了Cloneable,并且没有扩展AbstractFoo,那么子类就可以工作。 除了扩展的抽象类,我怎么能做到“相同”?