我有许多 POJO 风格的类,它们共享一个功能,比如readCSV方法。所以我想使用这些 POJO 可以扩展的单父(或者可能是抽象的,不确定是否应该是)类。这是一个伪代码:
(abstract) class CSVUtil {
private String[] fileHeader = null;
protected void setFileHeader(fileHeader) {
this.fileHeader = fileHeader;
}
protected List<WhateverChildClass> readCSV(String fileName) {
// read CSV using Apache Commons CSV
// and return a List of child type
List<WhateverChildClass> list = null;
// some declarations
try {
list = new ArrayList<WhateverChildClass>();
csvParser = new CSVParser(fileReader, csvFormat);
List csvRecords = csvParser.getRecords();
for (...) {
CSVRecord record = (CSVRecord) csvRecords.get(i);
WhateverChildClass childClass = new WhateverChildClass();
// loop through fields of childClass using reflection and assign
for (// all fields of childClass) {
childClass.setWhateverField(record.get(fileHeader[i]));
}
list.add(childClass);
System.out.println(p);
ps.add(p);
}
}
...
return list;
}
}
在其中一个孩子班上,说 ChildA
class ChildA extends CSVUtil {
// fields, getters, setters
}
如何对 CSVUtil 进行编码,以便在运行时确定父类中定义的readCSV中的子类?
是否有可能使这个方法静态并且仍然被继承?
作为替代方案,Apache Commons CSV 中是否有 API 通常可以读取 CSV,确定其架构,并将其包装为通用对象(我不知道我在这里是否有意义),并返回该对象的列表是 ?