泛型深入研究:
爲了實現一個泛型類,暫不知道類的類型,利用類生成器生成類對象(可以生成不同的類對象)
首先定義生成器接口:
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