/**
* @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);
}
}
這個類提供了一個基本實現,用以生成某個類的對象,這個類必須具備兩個特點
- 他必須申明爲public,因爲BasicGenerator要處理的類不在包中,所以它必須是public訪問權限
- 它必須具備默認的構造器(無參的構造器)
要創建這樣的構造器,只需要使用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()方法中使用它進行類型推斷