Java - 由具体 class 扩展的通用 class

Java - Generic class extended by concrete class

我有许多 classes,POJO 风格,共享一个功能,比如 readCSV 方法。所以我想使用这些 POJO 可以扩展的单个 parent(或者可能是抽象的,不确定是否应该是)class。这是 pseudo-code:

(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

class ChildA extends CSVUtil {

    // fields, getters, setters

}

如何对 CSVUtil 进行编码,以便我可以在运行时确定 readCSV[=30= 中的 child class ]定义在parentclass?

是否可以将此方法设为静态并仍然被继承?

作为替代方案,Apache Commons CSV 中是否有 API 通常可以读取 CSV、确定其架构并将其包装为通用 Object(我不知道我是否在这里说得通),以及 return 列表 Object 是什么?

您希望 readCSV 成为静态方法吗?

然后,我会说 ChildA class 不应该从 CSVUtil 继承,而是实现一个接口......类似这样的东西:

public final class CSVUtil {

  private CSVUtil() {
  }

  public static <T extends ICSV> List<T> readCSV(String filename) {
    ...
  }


class ChildA implements ICSV