15.4.4 一個通用的生成器(Generator) 泛型生成具體類型

/**
 * @param <T>
 */
public class BasicGenerator<T> implements Generator<T> {
    private Class<T> type;
    public BasicGenerator(Class<T> type){
        this.type = type;
    }
    public T next(){
        try {
            return type.newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     *
     * 靜態生成,不需要new
     * @param type
     * @param <T>
     * @return
     */
    public static <T> Generator<T> create(Class<T> type){
        return new BasicGenerator<T>(type);
    }
}

這個類提供了一個基本實現,用以生成某個類的對象,這個類必須具備兩個特點

  1. 他必須申明爲public,因爲BasicGenerator要處理的類不在包中,所以它必須是public訪問權限
  2. 它必須具備默認的構造器(無參的構造器)

要創建這樣的構造器,只需要使用create()方法就行了

下面是一個具有默認構造器的簡單類

public class CountedObject {
    private static long counter = 0;
    private final long id = counter++;
    public long id()    {
        return id;
    }
    public String toString(){
        return "CountedObject " + id;
    }

    public static void main(String[] args) {
        Generator<CountedObject> gen = BasicGenerator.create(CountedObject.class);

        IntStream.range(0,5).forEach(i-> System.out.println(gen.next()));
    }
}
可以看到,使用泛型方法創建Generator 對象,大大減少了我們要編寫的代碼,java 泛型要求傳入Class對象,以便可以在create()方法中使用它進行類型推斷
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章