/**
* @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()方法中使用它进行类型推断