class ToList
{
public static ToList<E> create(E...ts)//這一行會報錯Cannot make a static reference to the non-static type E
{
ToList<E> myList = new ToList<E>();
return myList;
}
}
注釋的那一行報錯的原因是,因為create(....)這個方法是一個靜态泛型方法,需要泛化,解決辦法是在static 後面加一個<E> ,即方法聲明變成了
public static <E> ToList<E> create(E...ts),這樣就不會報錯了。這個E類型為這個類ToList沒有任何關系,可以直接ToList.create(....)這樣調用,
例如:
ToList.create("1","2");傳回的就是ToList<String>
ToList.create(1,2);傳回的就是ToList<Integer>。
而下面一種情況就不同:
class ToList<E>
{
public ToList<E> create(E...ts)//這一行不會報錯
{
ToList<E> myList = new ToList<E>();
return myList;
}
}
crreate是ToList<E>的一個成員方法,隻有當你new出來一個這樣的類時,create方法才可以使用。是以,create方法裡的E的類型,取決于你new這個類時的傳遞的是什麼類型 ,
例如:
ToList<String> list1 = new ToList<String>(); list1.create("1","2")傳回的就是ToList<String>類型;
ToList<Integer> list1 = new ToList<Integer>(); list1.create(1,2)傳回的就是ToList<Integer>類型。