[Java] Vector en attribut ?

Résolu/Fermé
péchou - 25 mai 2008 à 18:37
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 26 mai 2008 à 20:23
Bonjour,

Lorsque l'on définit une classe en java, peut-on déclarer un Vector en tant qu'attribut ?

J'ai une classe CCuve (qui représente la cuve d'une pompe à essence)dont les instances doivent pouvoir être appelées depuis ma classe CSysteme (instance unique : notre_systeme). Je voulais donc utiliser un attribut Vector :

public class CSysteme {
//Attributs de la classe :
Vector<CCuve> Liste_cuves; // Liste des cuves de la station.
static int Nb_cuves; //Compte le nombre de cuves.

....

Et lorsque dans mon main j'essaye cela dans le main :

CCuve Cuve_vl = new CCuve();
Cuve_vl.initialisation_cuve("Cuve véhicules légers");
Notre_Systeme.Liste_cuves.addElement(Cuve_vl);

J'obtiens une java.lang.nullexception ...
Pouvez vous m'aider ? J'ai du mal à comprendre la notion de vector, je crois

Merci !
A voir également:

2 réponses

daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
25 mai 2008 à 18:50
pourquoi ne fais-tu pas un tableau de CCuve ?

peut etre plus simple non ? sinon au niveau de la déclaration du vector es-tu sur de dire de quel type il est ?

moi j'aurais fait private Vector liste_cuves;

//dans le constructeur liste_cuves = new Vector();

vu qu'un vector prend des object en parametre, c'est générique et tu peux tout mettre dedans donc meme des CCuve, voila j'espere t'avoir aider

bon courage

tchû
0
pourquoi ne fais-tu pas un tableau de CCuve ?

Si je fais un tableau, je peux pas accéder directement a mon objet non ? Alors qu'avec vector, oui (objet.vector.get ()...)

peut etre plus simple non ? sinon au niveau de la déclaration du vector es-tu sur de dire de quel type il est ?

moi j'aurais fait private Vector liste_cuves;

//dans le constructeur liste_cuves = new Vector();


Il n'y aura que des objets du type CCuve (Cuve_pl, Cuve_gpl, Cuve_vl), pourquoi tu fais private ? parce que je ne pourrais pas l'utiliser dans mon main, si ?

vu qu'un vector prend des object en parametre, c'est générique et tu peux tout mettre dedans donc meme des CCuve, voila j'espere t'avoir aider

Ma question est : si je mets un vector en attribut dans une classe A, et que je fais trois objets de cette classe, je peux avoir trois vecteurs différents ? qui n'auront pas le même contenu ? Et comment les initialiser ?

bon courage

tchû
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328 > péchou
25 mai 2008 à 20:53
Bonjour,
Tu as un nullPointerException parce que ton vecteur n'est pas instancié.
public class CSysteme {
//Attributs de la classe :
private List<CCuve> liste_cuves = new Vector<CCuve>()
static int nb_cuves; 

....


Vector implémente l'interface List, donc il est préférable de manipuler ton objet liste_cuves (sans majuscule de préférence) à travers une interface, même si c'est un objet de type Vector.

Mettre la visibilité à private te permettra d'accéder à ton objet dans toute ta classe (et uniquement dans celle-ci : pas dans les classes héritant ta classe, pas par les classes du même package... rien du tout, juste ta classe).
Donc si ton main est défini dans ta classe, tu peux y accéder sans problème.


Ma question est : si je mets un vector en attribut dans une classe A, et que je fais trois objets de cette classe, je peux avoir trois vecteurs différents ? qui n'auront pas le même contenu ? Et comment les initialiser ?


La classe vecteur ne peut contenir que des objets de même type (utilisation de la généricité avec <>).
Si tu veux contenir des objets de types différents, il faut utiliser une superclasse commune de ces objets. Si tu n'en a pas défini toi-même, tu peux utiliser Object, car en Java, toutes les classes héritent de la classe Object:
private List<Object> liste_cuves = new Vector<Object>()
0
Merci pour tes précisions qui m'ont bien aidées !

Je voudrais savoir une chose : pourquoi mets-tu private ? Car dans mon cas, cela ne conviendra pas du tout ! Y a t'il un risque en laissant l'attribut vector public ?
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
26 mai 2008 à 20:23
Hello,
En général, il faut toujours mettre tes attributs en private, pour des raisons de sécurité.
Ainsi, la portée de tes attributs est limitée à ta classe, et ça te permet d'éviter que quelqu'un de l'extérieur de puisse les lire, ou encore pire, les modifier.
Evidemment, il arrive très souvent qu'on veuille étendre l'accessibilité (comme dans ton cas), et donc on utilise des getters et setters (mais en général, quand tu définis des getters et des setters, c'est que tu as un réel besoin fonctionnel derrière, et tu ne prends pas l'habitude de tout déclarer en public).

Le seul cas qui a, selon moi, du sens lors de la déclaration d'attribut en public est dans le cas d'attributs static final, car tu peux les utiliser sans instancier de classe (exemple : Math.PI). A part ce cas, il faut prendre l'habitude de déclarer en private.
0