我有许多类,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,确定其架构,并将其包装为通用对象(我不知道我是否在这里有意义),并返回对象是什么的列表?
答案 0 :(得分:1)
您希望readCSV成为静态方法吗?
然后,我会说ChildA类不应该继承CSVUtil,而是实现一个接口......就像这样:
public final class CSVUtil {
private CSVUtil() {
}
public static <T extends ICSV> List<T> readCSV(String filename) {
...
}
class ChildA implements ICSV