初识Java中的Generator
说到在java中创建类的对象,一般都会想到用new关键字来实现。但是在某些特定情况下使用new来创建对象会显得更加麻烦,尤其在给容器初始化赋值的时候。最近在看《Thinking in Java》这本书时,对容器类有了更加深入的理解,而在使用对象填充容器时遇到了Generator这个知识点,通过使用Generator,可以很方便地为任何类提供类的对象,而不是通过new的方式。下面通过一个实例演...
说到在java中创建类的对象,一般都会想到用new关键字来实现。但是在某些特定情况下使用new来创建对象会显得更加麻烦,尤其在给容器初始化赋值的时候。
最近在看《Thinking in Java》这本书时,对容器类有了更加深入的理解,而在使用对象填充容器时遇到了Generator这个知识点, 通过使用Generator,可以很方便地为任何类提供类的对象,而不是通过new的方式。下面通过一个实例演示学习的过程。
1、申明一个Generator接口,提供一个next()方法,用以返回一个新的类对象。
public interface Generator<T> {
T next();
}
2、定义一个BasicGenerator类,对Generator接口进行实现,用以生成某个类的对象。通过create()方法创建新的对象,使用泛型参数。
package generator;
/**
* @author wangjie
* @version 2018/11/19
* 一个通用的generator
*/
public class BasicGenerator<T> implements Generator<T> {
private Class<T> type;
public BasicGenerator(Class<T> type){
this.type = type;
}
@Override
public T next(){
try{
return type.newInstance();
}catch(Exception e){
throw new RuntimeException(e);
}
}
public static <T> Generator<T> create(Class<T> type){
return new BasicGenerator<T>(type);
}
}
3、定义一个具有默认构造器的简单类:这个类CountedObject能够实现计数功能,告诉我们创建了几个CountedObject实例,并通过toString()方法打印其编号。
package generator;
/**
* @author wangjie
* @version 2018/11/19
*/
public class CountedObject {
private static long counter = 0;
private final long id = counter++;
public long id(){ return id; }
public String toString(){ return "CountedObject " + id; }
}
4、此时,可以使用BasicGenerator很容易地为CountedObject类创建一个Generator:
package generator;
/**
* @author wangjie
* @version 2018/11/19
*/
public class BasicGeneratorDemo {
public static void main(String[] args) {
Generator<CountedObject> gen = BasicGenerator.create(CountedObject.class);
for (int i = 0; i < 5; i++) {
System.out.println(gen.next());
}
}
}
5、看看结果:
可以看到,我们在给CountedObject类创建实例时并没有一个一个通过new去创建,使用Generator方便了许多。通过传入泛型参数,也提高了其通用性。
更多推荐
所有评论(0)