动态 class 与硬编码字段 Java
Dynamic class vs hardcoded fields Java
我有一个程序可以从不同的对象中招募犯罪现场的目击证人。
每一种学科都有自己的报告class。例如:
public class EyeWitnessReport extends AbstractReport {
private String details;
private String relation;
private QuestioningResults questioningResults;
private Integer stressLevel;
private EnumSet<CrimeFacts> crimeFacts;
private Religion religion; //to see if swearing on the Bible is an issue
}
public class ExpertWitnessReport extends AbstractReport {
private Expertise fieldOfExpertise;
private boolean relatedToAccused;
private List<Conflict> conflicts;
}
我的应用程序的主要功能是获取所有报告并将它们合并到一个 CrimeScene class 中,其中包含犯罪现场的所有详细信息(按优先级等)
public CrimeScene mergeReports(List<AbstractReport> sources){
//takes all the reports in sources and returns one CrimeScene with the most relevant fields
}
我的问题是,CrimeScene class 基本上是由报告中的数据按照一定的逻辑组成的。它有 70 个可能的字段(每种类型报告的字段),尽管平均只填充了大约 10-20 个。
另外它有 2-3 个自己的字段(creationTime、reportingOfficer 等...)
我应该如何实施它?
使 CrimeScene 成为常规 class(70 个硬编码字段,平均填充不超过 20 个)或动态 class,使用 DynaBean,Map<String, Object>
是更好的实现或者类似的东西?
最好将 class 与属性一起使用,或者可能使用某些复合 class,这样您就可以根据组合限制单个 class 中的属性数量。
通过这种方法,您(和任何其他开发人员)将确切地知道对象具有哪些属性和哪些类型。
如果你使用 map 那么你将失去类型安全,因为你将不得不使用 Map<String, Object>
来容纳不同类型的属性值。此外,使用地图方法了解存在哪些属性(哪些键在运行时添加到地图中)的唯一方法是调试您的代码。
我有一个程序可以从不同的对象中招募犯罪现场的目击证人。 每一种学科都有自己的报告class。例如:
public class EyeWitnessReport extends AbstractReport {
private String details;
private String relation;
private QuestioningResults questioningResults;
private Integer stressLevel;
private EnumSet<CrimeFacts> crimeFacts;
private Religion religion; //to see if swearing on the Bible is an issue
}
public class ExpertWitnessReport extends AbstractReport {
private Expertise fieldOfExpertise;
private boolean relatedToAccused;
private List<Conflict> conflicts;
}
我的应用程序的主要功能是获取所有报告并将它们合并到一个 CrimeScene class 中,其中包含犯罪现场的所有详细信息(按优先级等)
public CrimeScene mergeReports(List<AbstractReport> sources){
//takes all the reports in sources and returns one CrimeScene with the most relevant fields
}
我的问题是,CrimeScene class 基本上是由报告中的数据按照一定的逻辑组成的。它有 70 个可能的字段(每种类型报告的字段),尽管平均只填充了大约 10-20 个。 另外它有 2-3 个自己的字段(creationTime、reportingOfficer 等...)
我应该如何实施它?
使 CrimeScene 成为常规 class(70 个硬编码字段,平均填充不超过 20 个)或动态 class,使用 DynaBean,Map<String, Object>
是更好的实现或者类似的东西?
最好将 class 与属性一起使用,或者可能使用某些复合 class,这样您就可以根据组合限制单个 class 中的属性数量。 通过这种方法,您(和任何其他开发人员)将确切地知道对象具有哪些属性和哪些类型。
如果你使用 map 那么你将失去类型安全,因为你将不得不使用 Map<String, Object>
来容纳不同类型的属性值。此外,使用地图方法了解存在哪些属性(哪些键在运行时添加到地图中)的唯一方法是调试您的代码。