为 OpenCSVReader 映射动态设置 class-type 和 class
Dynamically set class-type and class for OpenCSVReader Mapping
我有三个 classes:
- 父类class父类
- child class 继承自 ParentClass
的 ChildClass1
- child class 继承自ParentClass的ChildClass2
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);
我有三个 classes:
- 父类class父类
- child class 继承自 ParentClass 的 ChildClass1
- child class 继承自ParentClass的ChildClass2
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);