天天看點

泛型類與靜态泛型方法 Cannot make a static reference to the non-static type

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>類型。