2012-04-23 10 views
2

マルチスレッドサーバーにリンクリストとして実装されたキューがありました。別のクラスからこのキューにアクセスしたいです。どちらのクラスも同じパッケージに入っています。私はこの静的なキューを静的な静的なものにしようとしましたが、ゲッターを通してアクセスしましたが、成功しませんでした。誰かが正確な問題が何であるか教えてください。Javaの別のクラスからの静的変数へのアクセス

これは私のコードです: キュー宣言:

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; 
    } 

Accesingキュー:

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

あなたはpublic staticにアクセスすることができ、接続

q.add(r); 
+5

コードの関連部分を投稿してください – scibuff

+0

また、実際の問題は何ですか? "成功なし"と説明する。それはコンパイルの問題か実行時ですか? – maksimov

+1

マルチスレッドプログラムでスレッドセーフでないキューを使用することに注意してください。 [BlockingQueue](http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html)をご覧になっていない場合は、こちらを参照してください。 – amit

答えて

10

のスレッドでキューに付加価値を012表記を使用して直接別のクラスのメンバー:

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をしていない限り)ではありませんが、あなたは1が必要な場合、それはあなたがそれを行う方法です。

0

あなたが直接あればアクセスすることができ、または静的getterメソッドを使用しなければならない...

これはあなたのキュークラスであれば...

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

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

次にあなたが呼び出すことがいずれかのあなたのリストにアクセスすることができましたQueue.myListまたはQueue.getMyList() - どちらも同じことを行います。 getterメソッドを使用するメリットは、メソッドへのアクセスを制御できることです。たとえば、メソッド​​を作成し、リストの呼び出しが順不同であることを防ぐことができます。

+0

私はこの2つのことを試しました。しかし、私はキューを空にしています。以下は私のコードのスニペットです。サーバークラスでは、私は接続クラスオブジェクトを作成し、新しいスレッドで新しい接続を作成しています。接続で私は次のようにキューを宣言しました: – Anup

+0

あなたの質問にあなたのコードを貼り付けて、正しい形式にすることができますか? – wattostudios

+0

キュー宣言:public static Queue q =新しいConcurrentLinkedQueue (); public static void setQ(Queue q){ \t \t Connection.q = q; } public static Queue getQ(){ \t \t return q; \t} – Anup

関連する問題