У меня есть класс классов POJO, который имеет одну функциональность, например readCSV метод. Поэтому я хочу использовать один родительский (или, может быть, абстрактный, не уверенный, должен ли он быть) класс, что эти POJO могут расширяться. Вот псевдо-код:Java - общий класс, расширенный конкретным классом
(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;
}
}
на одном из дочерних классов, скажем childâ
class ChildA extends CSVUtil {
// fields, getters, setters
}
Как закодировать CSVUtil таким образом, что я могу определить, в среде выполнения дочернего класса в readCSV, определенный в родительском классе?
Можно ли сделать этот метод статическим и все еще унаследованным?
В качестве альтернативы, есть API в Apache Commons CSV, который обычно может читать CSV, определять его схему и обертывать ее как общий объект (я не знаю, если я здесь понимаю) и вернуть список что бы это ни было?