2017-07-29 87 views
0
public class BlockingQueue<T> { 
    public static List<T> queue =new ArrayList<T>(); 
} 

我在嘗試創建通用Arraylist時出現錯誤?無法對非靜態類型進行靜態引用T

+4

。工作代碼,你明白什麼靜態手段?如果是這樣,請解釋在這裏使用它的原因。 – chrylis

+1

爲了完整起見,您正在嘗試執行的正確語法是'public static List queue = new ArrayList ;',但從語義上來說,您真的不想在這裏使用靜態字段。 – EJP

回答

2

這很有道理。想想T的含義 - 您正在定義一個類,其中每個實例指定其通用的具體類型。

但是靜態成員屬於類而不是一個特定的實例。當你在其中定義一個靜態成員時,這取決於這樣的T它會是什麼?靜態沒有實例 - 那麼什麼T

如果你想在queue是實例的成員,並依靠T只是刪除static

public class BlockingQueue<T> { 
    public List<T> queue = new ArrayList<T>(); 
} 
2

一類的T參數化類型相關聯的類的實例,而不是到類本身,但static是一個類,而不是實例修飾符。
所以編譯器不接受你從靜態字段/方法引用T

定義泛型類利用了實例指定的泛型。
因此,移除靜態modifier更有意義:

public class BlockingQueue<T> { 

    public List<T> queue = new ArrayList<T>(); 

} 
0

我發現我試圖創建靜態引用錯誤,我錯過了,下面.Thanks @chrylis

public class BlockingQueue<T> { 
    public List<T> queue =new ArrayList<T>(); 
} 
相關問題