为 OpenCSVReader 映射动态设置 class-type 和 class

Dynamically set class-type and class for OpenCSVReader Mapping

我有三个 classes:

ParentClass 中只有一个方法会被子类继承classes。两个子 classes 都有不同的字段以及 getter 和 setter(代码示例中未显示 getter 和 setter)。 子 classes 是 csv 文件 (OpenCSVReader) 的表示。虽然这与我的问题无关,但为了完整起见,字段都带有约束条件。

public class ParentClass {
    public boolean myMethod(){
    }
}

public class ChildClass1 extends ParentClass{
    @NotNull
    private String child1Field1

    @NotNull
    private String child1Field2
}

public class ChildClass2 extends ParentClass{
    @NotNull
    private String child2Field1

    @NotNull
    private String child2Field2
}

此外,我还有一个完全不同的方法class。这些是使用 OpenCSVReader 的方法的第一行(在该方法中还使用了 CsvToBean 等 - 未显示,因为它对于问题本身不是必需的):

private boolean compareFiles(File created, File template, ReportType reportType, Class<ChildClass1> reportClass) throws Exception{

    CSVReader readerTest = new CSVReader(new FileReader(created),';','\'');
    CSVReader readerTemplate = new CSVReader(new FileReader(template), ';', '\'');

    HeaderColumnNameTranslateMappingStrategy<ChildClass1> strat = new HeaderColumnNameTranslateMappingStrategy<>();
    strat.setType(reportClass);

我尝试实现的是更改 HeaderColumnNameTranslateMappingStrategy 中的 class 类型以及 class 中的静态类型 strat.setType 动态地,以便在此上下文中可以使用 ChildClass1 和 2 以及更多 ChildClasses。换句话说,我想将这些参数作为参数传递给方法 compareFiles().

我已经尝试过仿制药,但到目前为止还没有用。可能泛型是解决方案,但我对这个概念不是很熟悉。

希望我把问题描述的足够清楚。如果没有,请不要犹豫,通过评论提问。

使用 generic method,像这样:

private <T extends ParentClass> boolean compareFiles(
    File created, 
    File template, 
    ReportType reportType, 
    Class<T> reportClass
) throws Exception {
   ...
   HeaderColumnNameTranslateMappingStrategy<T> strat = new HeaderColumnNameTranslateMappingStrategy<>();
   strat.setType(reportClass);
   ...

并像这样调用它:

compareFiles(created,template,reportType,ChildClass1.class);
...
compareFiles(created,template,reportType,ChildClass2.class);