2010-06-10 4 views
2

Si je veux créer un formulaire qui ajoute des personnes à une liste, comment puis-je avoir accès à cette liste depuis une autre classe? Où devrais-je définir cette liste afin que d'autres classes puissent accéder aux membres, à la taille, etc.? Par exemple, si j'ai une classe Foo qui a l'interface graphique pour mon formulaire, ainsi que des boutons pour ajouter et supprimer des personnes à la liste, il serait logique de déclarer la liste comme une variable d'instance privée de classe Foo. Mais alors, si j'ai une autre classe, Barre de classes, comment obtient-elle les valeurs qui sont actuellement dans cette liste pour mettre à jour d'autres composants graphiques? Ou est-ce le mauvais endroit pour déclarer la liste en général? Merci.Avoir accès à une variable privée d'autres classes en Java

Répondre

2

Les autres classes ne doivent pas être en contact avec la liste. Ils devraient interroger le Foo pour obtenir des informations sur la liste, à quel point le Foo peut parler à sa liste privée.

+0

Pouvez-vous me donner un exemple de comment cela fonctionnerait? Je devine que je suis confus puisque je déclare seulement un objet de type Foo, alors si j'avais une fonction qui retourne la taille de la liste, je devrais créer un nouvel objet à partir de ma classe Bar pour utiliser la fonction membre getSize ? – Crystal

+0

Pourquoi Bar n'utiliserait-il pas l'instance existante de Foo? –

+0

Comment Bar utilise-t-il cette instance créée dans une autre classe? – Crystal

0

Vous ne devriez pas leur donner un accès direct à une variable privée (en fait les classes extérieures ne la verront même pas).

Pour donner/modifier les informations de la liste, la classe Foo doit avoir des méthodes pour interagir avec la liste privée. Par exemple, vous pouvez avoir une méthode appelée getSize() qui retournera la taille de la liste.

+0

Je suppose qu'il y a un 'non' manquant dans la première phrase –

+0

Vous avez raison. J'ai fait le changement. – Pran

0

Dans le cas le plus simple d'utiliser une fonction getter:

Ensuite, d'autres objets peuvent fonctionner sur la liste directement. Pour être plus orienté objet, envelopper les méthodes liste d'accès à votre objet, et ne jamais revenir directement l'objet de la liste, par exemple:

Object getItemFromList (int i) { return list.get(i); } 
1

Comme je l'ai dit dans my answer to your previous question, je ne pense pas une liste de données appartient à l'intérieur d'un composant gui. Je pense que vous devriez avoir un noyau d'application, un service si vous voulez, que vous pouvez utiliser depuis le composant gui, sans coupler les deux.

De cette façon, il est possible de créer un client Web, un client de ligne de commande, un client SWT, etc. sans modifier le code de l'application principale. Vous venez d'écrire une nouvelle interface graphique et d'y injecter le service. Une interface graphique doit avoir accès aux services mais ne pas en être un.

Questions connexes