Accès aux variables statiques à partir d'une autre classe en java
J'ai eu une file d'attente mis en œuvre en tant que liste liée dans mon serveur multithread. Je veux accéder à cette file d'attente à partir d'une autre classe. Les deux classes sont dans le même package. J'ai essayé de faire cette file d'attente du public static, et y accéder via lecture, mais sans succès, quelqu'un Peut-il me dire quel est le problème exact.
C'est mon code:
La File D'Attente De Déclaration:
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;
}
Accès Aux Files D'Attente:
Queue<Request> queue=new ConcurrentLinkedQueue<Request>();
queue=Connection.getQ();
Ajouter de la Valeur à la File d'attente dans le thread de connexion
q.add(r);
post les parties pertinentes de votre code, veuillez
Aussi quel est le réel problème que vous rencontrez? Expliquer "sans succès". Est-il des problèmes de compilation ou de l'exécution?
Être conscient de l'utilisation non thread-safe files d'attente sur un programme multithread. Jetez un oeil à BlockingQueue si vous ne l'avez pas déjà, cela peut vous aider.
Si votre question a été posée, ou si elle n'est plus valide, s'il vous plaît "cochez la case" choisir la réponse la plus appropriée de sorte que chacun sait que le problème a été résolu. Merci.
Aussi quel est le réel problème que vous rencontrez? Expliquer "sans succès". Est-il des problèmes de compilation ou de l'exécution?
Être conscient de l'utilisation non thread-safe files d'attente sur un programme multithread. Jetez un oeil à BlockingQueue si vous ne l'avez pas déjà, cela peut vous aider.
Si votre question a été posée, ou si elle n'est plus valide, s'il vous plaît "cochez la case" choisir la réponse la plus appropriée de sorte que chacun sait que le problème a été résolu. Merci.
OriginalL'auteur Anup | 2012-04-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez accéder à un
public static
membre d'une autre classe directement, à l'aide de la notationClassName.memberName
:public static
membres de données ne sont généralement pas une bonne idée (sauf si elles ontfinal
), mais si vous en avez besoin, c'est comment vous le faites.n'est pas un objet en Java, pas de. (Comme vous le savez, il serait un objet, plus particulièrement d'une fonction constructeur -- en JavaScript.) Les Classes sont un concept de première classe en Java. Il y a est un objet qui représente la classe
Foo
(une instance deClass
vous pouvez accéder viaFoo.class
), maisFoo
lui-même n'est pas un objet.Merci pour votre réponse T. J.! Alors, que devons-nous appeler Foo Foo.barre, si ce n'est pas un objet, ni une classe? Il semble difficile de trouver cette réponse explicitement dans n'importe quelle source...
C'est juste le nom de la classe. De plus, dans le JLS: docs.oracle.com/javase/specs/jls/se9/html/jls-6.html
Oh je t'ai eu! Je le vois en 6.1. Les déclarations. Je vous remercie de votre aide! 😀
OriginalL'auteur T.J. Crowder
Vous devriez pouvoir y accéder directement, ou à l'aide de statique des méthodes de lecture...
Si c'est votre File d'attente de la classe...
Ensuite, vous pouvez accéder à votre liste soit en appelant
Queue.myList
ouQueue.getMyList()
- les deux vont faire la même chose. L'avantage d'utiliser une méthode de lecture est que vous pouvez contrôler l'accès à la liste, par exemple en mettant à la méthodesynchronized
, de prévenir les appels à la liste en cours de la commande.Pourriez vous s'il vous plaît coller votre code dans votre question, donc, c'est peut être formaté correctement.
La file d'attente de déclaration: public static File d'attente<Demande> q=new ConcurrentLinkedQueue<Demande>(); public static void setQ(File d'attente<Demande> q) { Connexion.q = q; } public static File d'attente<Demande> getQ() { return q; }
Ajouter de la valeur à la file d'attente dans la méthode run du thread: getQ().ajouter(r); et l'accès aux file d'attente de cette façon: File<Demande> file=new ConcurrentLinkedQueue<Demande>(); file d'attente=Connexion.getQ();
OriginalL'auteur wattostudios