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
我有许多 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