Java - 由具体类扩展的泛型类

时间:2015-08-14 03:51:16

标签: java-7 apache-commons-csv

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

1 个答案:

答案 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