public class BlockingQueue<T> {
public static List<T> queue =new ArrayList<T>();
}
我在嘗試創建通用Arraylist
時出現錯誤?無法對非靜態類型進行靜態引用T
public class BlockingQueue<T> {
public static List<T> queue =new ArrayList<T>();
}
我在嘗試創建通用Arraylist
時出現錯誤?無法對非靜態類型進行靜態引用T
這很有道理。想想T
的含義 - 您正在定義一個類,其中每個實例指定其通用的具體類型。
但是靜態成員屬於類而不是一個特定的實例。當你在其中定義一個靜態成員時,這取決於這樣的T
它會是什麼?靜態沒有實例 - 那麼什麼T
。
如果你想在queue
是實例的成員,並依靠T
只是刪除static
:
public class BlockingQueue<T> {
public List<T> queue = new ArrayList<T>();
}
一類的T
參數化類型相關聯的類的實例,而不是到類本身,但static
是一個類,而不是實例修飾符。
所以編譯器不接受你從靜態字段/方法引用T
。
定義泛型類利用了實例指定的泛型。
因此,移除靜態modifier
更有意義:
public class BlockingQueue<T> {
public List<T> queue = new ArrayList<T>();
}
我發現我試圖創建靜態引用錯誤,我錯過了,下面.Thanks @chrylis
public class BlockingQueue<T> {
public List<T> queue =new ArrayList<T>();
}
。工作代碼,你明白什麼靜態手段?如果是這樣,請解釋在這裏使用它的原因。 – chrylis
爲了完整起見,您正在嘗試執行的正確語法是'public static List queue = new ArrayList ;',但從語義上來說,您真的不想在這裏使用靜態字段。 –
EJP