1

我有许多 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,确定其架构,并将其包装为通用对象(我不知道我在这里是否有意义),并返回该对象的列表是 ?

4

1 回答 1

1

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

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

public final class CSVUtil {

  private CSVUtil() {
  }

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


class ChildA implements ICSV
于 2015-08-24T13:13:12.303 回答