2016-09-08 3 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<>(); 
    } 
} 

... как вы можете видеть, «список» должен принимать различные обобщенные типы для каждого экземпляра А. Статический список не будет иметь никакого смысла, так как это нужно будет быть одновременно и двух типов.

Тот факт, что он должен быть привязан к конкретному экземпляру, должен, вероятно, заставить вас переосмыслить то, что вы пытаетесь сделать, разделяя значение с другими классами.

Смежные вопросы