我有三个班级:
在ParentClass中,只有一个方法将由子类继承。两个子类都有不同的字段和getter和setter(代码示例中没有显示getter和setter)。 子类是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
}
此外,我在一个完全不同的类中有一个方法。这些是使用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
中的类类型以及中的静态类
动态strat.setType
,以便可以在此上下文中使用ChildClass1和2以及更多ChildClasses。换句话说,我想将这些参数作为参数传递给方法compareFiles()
。
我已经尝试过泛型,但到目前为止它还没有用。可能是泛型是解决方案,但我对这个概念并不是很熟悉。
我希望我能够清楚地描述这个问题。如果没有,请不要犹豫,通过评论询问。
答案 0 :(得分:1)
使用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);