我有四个相似的类,它们只在内部创建的对象类型上有所不同 喜欢这个
public class ImportingWarehouseP //ImportWarehouseW, ImportDictionary, ImportSupplier
{
private ArrayList<WarehouseP> list = new ArrayList<WarehouseP>();
public void importWarehouseP(File fileName) throws FileNotFoundException
{
FileReader in = new FileReader(fileName);
Scanner src = new Scanner(in);
src.useDelimiter("\n");
src.next();
for (int g = 0; src.hasNext(); g++)
{
String record = src.next();
String [] asdf = record.trim().split(";|:");
WarehouseP ob = new WarehouseP (asdf); //here is the difference instead WarehouseP can be WarehouseW, Dictionary, Supplier
list.add(ob);
}
}
public ArrayList<WarehouseP> getList()
{
return list;
}
}
是否可以创建一个uniwersal类“Import”,并且只在main中指定我想要的List类型? e.g
public static void main(String[] args){
File warehousePFile = new File(path);
ImportWarehouseP ImpWP = new Import<WarehouseP>();
ImpWP.importWarehouseP(warehousePFile);
ArrayList<WarehouseP> recordsWP = ImpWP.getList();
}
答案 0 :(得分:0)
您可以使用带有生成对象的方法的抽象类,或使用策略模式并传入工厂来生成对象。
第一种方法
new Import<WarehouseP>() {
protected List<WarehouseP> buildList() {
return new ArrayList<WarehouseP>();
}
}
其中
abstract class Import<T> {
protected abstract List<T> buildList();
}
第二种方法
new Import<WarehouseP>(new ListBuilder<WarehouseP>() {
public List<WarehouseP> buildList() {
return new ArrayList<WarehouseP>();
}
});
其中
interface ListBuilder<T> {
public abstract List<T> buildList();
}
第一种方法更简单,第二种方法更清洁。