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

猜你喜欢

转载自blog.csdn.net/perfect_red/article/details/80787690