动态类与硬编码字段Java

时间:2019-02-19 20:54:51

标签: java class architecture hashmap implementation

我有一个程序可以从各个主题中招募犯罪现场的见证人。 每种主题都有其自己的报告类。例如:

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类,其中包含犯罪现场的所有详细信息(按优先级等)

 public CrimeScene mergeReports(List<AbstractReport> sources){
        //takes all the reports in sources and returns one CrimeScene with the most relevant fields
}

我的问题是,按照一定的逻辑,CrimeScene类基本上由报告中的数据组成。它有70个可能的字段(每种报告类型的字段),尽管平均仅填写10-20个左右。 另外,它拥有自己的2-3个字段(creationTime,reportingOfficer等)

我应该如何实施它? 使用DynaBean,Map<String, Object>或类似的东西,使CrimeScene成为常规类(70个硬编码字段,平均将不超过20个硬字段)或动态类,是更好的实现吗? >

1 个答案:

答案 0 :(得分:0)

最好将带有属性的类或某些复合类一起使用,这会允许您由于组成而限制单个类中的属性数量。 使用这种方法,您(以及任何其他开发人员)将确切知道对象具有哪些属性和类型。

如果使用map,那么您将失去类型安全性,因为必须使用Map<String, Object>来容纳不同类型的属性值。同样,使用map方法时,知道存在哪些属性(在运行时将哪些键添加到map中)的唯一方法是调试代码。