动态 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> 来容纳不同类型的属性值。此外,使用地图方法了解存在哪些属性(哪些键在运行时添加到地图中)的唯一方法是调试您的代码。