2012-04-23 2 views
2

У меня была очередь, реализованная как связанный список на моем многопоточном сервере. Я хочу получить доступ к этой очереди из другого класса. Оба класса находятся в одном пакете. Я попытался сделать эту очередь публичной статикой и получить доступ к ней через getter, но безуспешно. Может кто-нибудь сказать мне, какая именно проблема.Устанавливая статическую переменную из другого класса в java

Это мой код: Queue Декларация:

public static Queue<Request> q=new ConcurrentLinkedQueue<Request>(); 

public static void setQ(Queue<Request> q) { 
     Connection.q = q; 
    } 

    public static Queue<Request> getQ() { 
     return q; 
    } 

экранной Очередь:

Queue<Request> queue=new ConcurrentLinkedQueue<Request>(); 
queue=Connection.getQ(); 

Добавление стоимости в очередь в резьбе соединения

q.add(r); 
+5

отправьте соответствующие части вашего кода – scibuff

+0

Также в чем проблема? Объясните «без успеха». Это проблемы компиляции или время выполнения? – maksimov

+1

Имейте в виду, что для многопоточной программы небезопасные очереди. Посмотрите на [BlockingQueue] (http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html), если вы этого еще не сделали, это может вам помочь. – amit

ответ

10

Вы можете получить доступ к public static член другого класса напрямую, используя обозначение ClassName.memberName:

public class Foo { 
    public static String bar = "hi there"; 
} 

public class Thing { 
    public static void main(String[] args) { 
     System.out.println(Foo.bar); // "hi there" 
    } 
} 

public static элементы данных, как правило, не отличная идея (если они не final), но если вам нужен, то, как вы это делаете.

0

Вы должны быть в состоянии получить доступ, если напрямую, либо с использованием статических методов получения ...

Если это ваш класс Queue ...

public class Queue { 
    public static LinkedList myList = new LinkedList(); 

    public static ListedList getMyList(){ 
     return myList; 
    } 
} 

Тогда вы могли бы получить доступ к списку либо позвонив Queue.myList или Queue.getMyList() - обе сделают то же самое. Преимущество использования метода геттера заключается в том, что вы можете контролировать доступ к списку, например, путем создания метода synchronized, предотвращающего вызывание списка из списка.

+0

Я пробовал эти две вещи. Но я получаю очередь пустой. Ниже приведены фрагменты моего кода. В классе сервера я создаю объект класса соединения и создаю новое соединение в новом потоке. В связи я объявил очередь как: – Anup

+0

Не могли бы вы вставить свой код в свой вопрос, чтобы его можно было отформатировать правильно. – wattostudios

+0

Объявление очереди: public static Queue q = new ConcurrentLinkedQueue (); public static void setQ (Queue q) { \t \t Connection.q = q; } public static Queue getQ() { \t \t return q; \t} – Anup

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