2016-09-08 38 views
0

我有以下的ArrayList:如何使泛型類型ArrayList爲靜態?

public ArrayList<E> list = new ArrayList<>(); 

我想分享它與其他類值,但是當我把它定義爲靜態它給了我下面的錯誤:

'Packagename.Class.this' Cannot be referenced from a static context. 

因此,沒有人知道如何使它成爲靜態的,或者如何以其他方式與其他類共享其價值?

謝謝。

+1

你能分享一個更完整的例子嗎?你究竟想達到什麼目的? – Mureinik

+0

@Mureinik我有一個類將對象添加到上面的列表中,在另一個類中我有一個等待列表被填充的線程,所以我想從線程檢查它時獲得相同的列表值。 –

+0

然後,線程將需要對包含實例的引用,以便它可以從該實例獲取正確的引用。 – BarrySW19

回答

1

您不能在靜態屬性定義上使用<E>,因爲對於該類的每個實例都將以不同的方式定義<E>。例如考慮下面的代碼片段:

public class A<E> { 
    private List<E> list = new ArrayList<>(); 

    public static void main(String[] args) { 
     A<String> a1 = new A<>(); 
     A<Integer> a2 = new A<>(); 
    } 
} 

...你可以看到,在「名單」需要採取不同的泛型類型爲A的每個實例的靜態列表將毫無意義,因爲這將需要同時是兩種類型。

它必須與特定實例綁定的事實可能會導致您重新考慮您嘗試與其他類共享該值的操作。