Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/11/2007, à 04:55

doc212

syntaxe de casting, transtypage, cast en java

Salut,


j'aurais une petite question concernant une syntaxe de casting.

D'abord, je crée un vecteur en utilisant la classe Vector dans le package java.util.
par ailleurs, j'ai une classe MaClasse avec une méthode publique retournant un String, disons MaMethode().

le code ci dessous ne compile pas

Vector V=new Vector();
MaClasse P=new MaClasse();

V.add(P);

System.out.println(V.elementAt(0).MaMethode());

car la fonction V.elementAt(0) retourne un objet de la classe Object qui ne possède pas la méthode MaMethode(). Il faudrait le caster vers un objet de la classe MaClasse mais je ne vois pas la syntaxe à  utiliser.

j'ai essayé sans succès:

System.out.println((MaClasse)V.elementAt(0).MaMethode());
System.out.println(V.(MaClasse)elementAt(0).MaMethode());
System.out.println(V.elementAt(0).(MaClasse)MaMethode());

Bien sûr ce qui marche c'est de passer par un objet intermédiaire:

MaClasse tmp = new MaClasse()
tmp=(MaClasse)V.elementAt(0);
System.out.println(tmp.MaMethode());

Mais je me demandais juste si il n'y avait pas moyen de s'en passer ...

N.B. l'idée c'est que normalement ya pleins d'éléments dans le Vector et qu'on le parcours pour lancer les méthodes de ses éléments ... je me rends bien compte qu'avec un seul élément dans le Vector c'est très stupide comme idée ... :-)


Merci d'avance.

Hors ligne

#2 Le 16/11/2007, à 08:52

Martopioche

Re : syntaxe de casting, transtypage, cast en java

Evidemment, tu a zappé la seule syntaxe qui marche...

(maClasse)(V.elementAt(0)).maMethode()

Et comme je suis pas certain à  100% que c'est exactement ça, il reste

((maClasse)(V.elementAt(0))).maMethode()

big_smile

Par contre, si tu est sur du Java post 1.5, laisse tomber les Vectors, ça sert plus à  rien.L'API des collections et les génériques te facilitent grandement la vie :

Collection<MaClasse> c = new ArrayList();
c.add(P);
// Puis pour parcourir - pareil pour un élément, c'est débile -
c.iterator.next().maMethode();

ou via un iterator pour les collections possédant plus d'un éléments. En plus elles sont bien plus performantes.
while (c.hasNext

Hors ligne

#3 Le 16/11/2007, à 10:15

doc212

Re : syntaxe de casting, transtypage, cast en java

Merci pour le cast, la bonne forme était

((MaClasse)(V.elementAt(0))).MaMethode();

ce qui semblait logique en fait ... mais j'viens de me lancer dans java :-)

Apparemment le Collection<MaClasse> n'a pas l'air de passer ...

quand je fais java -version, j'obtiens

java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode, sharing)

Mais le truc des iterator m'a l'air bien pratique ...

while(V.iterator().hasNext())
       System.out.println(V.listIterator().nextIndex()+"\n"+((Personne)(V.listIterator().next())).DecrisToi()

Mais j'ai un peu de mal avec... avec ce bout de code, il boucle sur le premier élément de mon vecteur

pourtant quand je fais appel à  listIterator().next() il devrait renvoyer l'objet et l'iterator devrait passer à  l'index suivant non ?

Hors ligne

#4 Le 16/11/2007, à 10:28

Martopioche

Re : syntaxe de casting, transtypage, cast en java

Oulala, non...

Tu doit parcourir une liste, en utilisant un itérateur :

Collection<MaClasse> c...
Iterator<MaClasse i = c.iterator();

while (i.hasNext() {
    i.next().maMethodeDeMaClasse();
// ou
    MaClasse c = i.next();
    traitements...
}

heu tiens : http://www.jmdoudoux.fr/java/dej/chap009.htm#chap_9
et http://www.jmdoudoux.fr/java/dej/chap018.htm#chap_18

Bon courage wink

Hors ligne

#5 Le 16/11/2007, à 16:29

nono75

Re : syntaxe de casting, transtypage, cast en java

Salut,
tu as aussi la FAQ qui donne pas mal de trucs pour manier les collections :
http://java.developpez.com/faq/java/?page=langage_donnees

Tu peux aussi pouvoir utiliser la boucle foreach :

Collection<MaClasse> iterable;
for (Classe elem : iterable) {
			elem.maMethode();
}

Hors ligne