在java中创建通用(泛型?)类

时间:2014-06-11 14:04:02

标签: java generics universal

我有四个相似的类,它们只在内部创建的对象类型上有所不同 喜欢这个

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();
}

1 个答案:

答案 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();
}

第一种方法更简单,第二种方法更清洁。