泛型深入研究:
为了实现一个泛型类,暂不知道类的类型,利用类生成器生成类对象(可以生成不同的类对象)
首先定义生成器接口:
package com;
public interface Gernerator<T> {
T next();
}
这是定义的生成器接口(泛型)
然后就是顶一个泛型类来实现这个接口的方法
public class test<T> implements Gernerator<T>{
private Class<T> types;
public test(Class<T> types)
{
this.types=types;
}
@Override
public T next() {
// TODO Auto-generated method stub
try {
return types.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public static <T> Gernerator<T> creat(Class<T> type)
{
return new test<T>(type);
}
public static void main(String[] args) {
Gernerator<countednumber> gen=test.creat(countednumber.class);
for(int i=0;i<5;i++)
{
System.out.println(gen.next());
}
}
}
class<T>是一个类的泛指,也就是一个类的名字,这个名字可以生成类对象(大致可以这么理解),
types.newInstance()
这就是生成类的对象,在next()方法里生成对象,这个泛型类有一个成员是不确定的类,为了调用类生成器的next()方法生成类对象,就需要有一个Gernerator接口类
或者是接口类的子类对象,这里用到了creat方法,传递的参数是一个位置的类名,接下来需要自己定义一个类:
package com;
public class countednumber {
private static long number=0;
private final long id=number++;
public long id()
{
return id;
}
public String toString()
{
return ("countednumber"+" "+id);
}
}
这个类记录了从开始到结束共创建了多少个类对象,并重载了toString()方法,方便打印输出,这样就实现了在不知道类名的情况下,创建多个未知类名的对象,执行结果
如下所示:
countednumber 0
countednumber 1
countednumber 2
countednumber 3
countednumber 4