2010-11-27 11 views
0

Je développe un programme Java, j'ai 2 classes différentes qui ont besoin de partager des variables les unes avec les autres. Donc, à cet effet, j'ai créé une troisième classe, qui contient ces variables partagées. Fondamentalement, la première classe a son propre drapeau dans cette troisième classe, et la deuxième classe a son propre drapeau dans cette troisième classe. Et j'ajoute "étendre ThirdClass" à la définition d'autres classes, bien sûr.Comment utiliser les variables globales statiques dans JAVA

Mon problème est lorsque je change la valeur de la première classe 'flag dans la méthode principale de première classe, la deuxième classe n'est pas capable de voir ce changement. A savoir, il voit le drapeau avec la valeur initiale. Je pense qu'il s'agit de variables statiques. Mais je ne connais pas la solution.

En fait, j'ai deux serveurs et plusieurs clients. J'essaie de simuler differenet situations de ces serveurs pour mon cours de systèmes distribués. Chaque serveur a sa propre table de données qui est synchronisée avec d'autres. Par simulation, je veux dire que le serveur peut être en panne ou en panne, et lorsque le client essaie d'atteindre le serveur, je dois le diriger vers un autre serveur. Donc, entre les clients et les serveurs, j'ai besoin d'envoyer des informations.

Comment puis-je partager des variables entre deux classes, et facilement modifier ces variables par n'importe quelle classe sans perte de modifications précédentes?

Merci.

+5

L'approche globale est cassée. Vous devez étudier la POO, puis analyser le problème que vous tentez de résoudre. – cherouvim

+0

[Pourquoi tant de gens écrivent-ils JAVA au lieu de Java?] (Http://programmers.stackexchange.com/q/2271/241) –

+1

est ce devoir? Si c'est le cas, veuillez le marquer comme tel. – hvgotcodes

Répondre

4

EDIT - cette réponse est pour une version précédente de la question, qui ne comprend rien sur les clients et les serveurs multiples. Cette réponse concerne le partage de données entre instances de classes.

Il y a plusieurs façons de faire quelque chose comme ça. Si j'ai compris votre approche décrite dans le premier paragraphe, vous ne voulez pas que class1 et class2 étendent class3. Vous voulez qu'ils aient tous deux une référence à la même instance de class3. Si elles partagent une référence au même objet, les valeurs modifiées sur cet objet seront reflétées dans les deux classes. S'ils étendent class3, comme vous l'avez dit, alors class1 et class2 auront les propriétés de class3, mais ils ne partageront aucune donnée. Si la classe 3 avait une propriété

Object value; 

alors instances des classes 1 et class2 aurait des références distinctes pour séparer les cas de « valeur ».

Vous devez étudier la relation entre une classe et une instance d'objet, ainsi que l'extension d'une classe. Notez que ce n'est pas vraiment un bon moyen de partager des informations entre les objets d'un vrai programme. Vous pouvez rencontrer toutes sortes de problèmes de concurrence. La même chose est vraie pour une solution qui utilise un mécanisme global implémenté en utilisant des champs statiques.

Pour ce faire avec des champs statiques faire quelque chose comme:

class SharedData { 
    public static Object shared1; 
} 

puis dans les instances de classes 1 et classe2 vous pouvez accéder

SharedData.shared1 

soit pour définir ou obtenir.

Mais je ne ferais rien de tel dans n'importe quel contexte professionnel.

+0

+1 Bien expliqué. – prasopes

+0

@stoupa, merci. – hvgotcodes

+0

Vous avez bien répondu à la question, mais je ne pense pas que ce soit la réponse dont il avait besoin. Voir le commentaire de @cherouvim – Jorn

0

Vous pouvez résoudre cela en utilisant la statique si cela a du sens.Lorsqu'un membre est déclaré statique pour une classe, tout le monde accédant à ce membre fait référence à la même instance de cette variable, mais cela ne ressemble pas vraiment à ce que vous cherchez. Si vous souhaitez que certaines données soient partagées par deux classes, vous pouvez placer les données dans une troisième classe et lorsque vous créez une instance de cette troisième classe, assurez-vous que les deux autres classes y ont accès.

Pouvez-vous décrire ce que vous essayez d'accomplir?

+0

En fait, j'ai deux serveurs et plusieurs clients. J'essaie de simuler differenet situations de ces serveurs pour mon cours de systèmes distribués. Chaque serveur a sa propre table de données qui est synchronisée avec d'autres. Par simulation, je veux dire que le serveur peut être en panne ou en panne, et lorsque le client essaie d'atteindre le serveur, je dois le diriger vers un autre serveur. Donc, entre les clients et les serveurs, j'ai besoin d'envoyer des informations. – andevmj

Questions connexes