Bonjour,
je voudrais caster un Object[] et String[] mais ça me génére une "ClassCastException". Comment faire ?
Cordialement
trax
Bonjour,
je voudrais caster un Object[] et String[] mais ça me génére une "ClassCastException". Comment faire ?
Cordialement
trax
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Object [] tablo = ... // tu l'instancie ou récupère tes valeurs. String [] tabls = new String [tablo.length]; for(int i=0 ; i<tabls.length ; i++){ tabls[i] = (String) tablo[i]; //lance 1 ClassCastException si tablo[i] n'est pas de type String (ou fils de String) }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int i=0; for(Object o:tablo){ tabls[i++] = o.toString(); }
o.toString();
renvoie l'adresse mémoire de l'Object.
Au temps pour moi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part String.valueOf(o);
[HS]
pas possible, la classe String est déclarée finalEnvoyé par NeptuS
.
[/HS]
Je ne répondrai à aucune question technique par MP.
Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
Enfin, quand une solution a été trouvée à votre problème pensez au tag :resolu:
Cours Dvp : http://ydisanto.developpez.com
Blog : http://yann-disanto.blogspot.com/
Page perso : http://yann-disanto.fr
au temps pour moi ... mais le code reste juste
merci pour l'info
ok mais il y a pas une méthode plus simple (genre un cast a la volé) que de parcourir tout le tableau ?
Ca me semble un peu lourd comme méthode si le tableau devient un tant soit peu long.
Non, tu ne peut pas le faire autrement, d'ailleurs si ton tableau n'est pas énorme, ce n'est pas lourd du tout.Envoyé par trax44
Un tableau de String est aussi un tableau d'Object, mais un tableau d'object n'est pas un tableau de String, c'est pour ca que tu ne peut pas le caster de manière toute simple.
Si tu travaillais avec des Collection, tu aurais la possibilité de le faire...
Comment?Si tu travaillais avec des Collection, tu aurais la possibilité de le faire...![]()
j'ai pas tous lu.
tu veux passer de Object[] a des String[]?
tu peut essayer comme ca.
ps: j'ai pas moi meme tester :-)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Object[] objects = new String[100]; for(int i = 0; i<100; i++) { objects[i] = MessageFormat.format("this is the string number {0}.\n", i + 1) ; } String[] strings = new String[objects.length]; (Arrays.asList(objects)).toArray(strings); System.out.println(Arrays.toString(strings));
Envoyé par seriousme
En admettant biensur que la collection list ne contienne que des chaines de caractères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part String[] strings = (String[])list.toArray(new String[list.size()]);
Quelle différence avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part String[] strings = (String[])list.toArray(new String[list.size()]);
?
Code : Sélectionner tout - Visualiser dans une fenêtre à part String[] strings = (String[])list.toArray();
avec un toArray() simple, il vas lui même instancier un tableau d'Object alors que dans ma solution, tu lui transmet le tableau de String initialisé au bon nombre d'éléments et c'est la méthode qui se charge elle même de transferer les objects !
C'est une optimisation pour lui éviter de chercher la taille et le type?
Ca sert juste à lui macher le travail?
non, la taille c'est ce qui lui pose le moins de problème, c'est juste qu'il faut lui donné le type !
Si tu ne lui donne aucun type, il converti en Object[] !
N'oublie pas que le transtypage n'est pas passé à la méthode toArray() donc, si tu regarde la ligne suivante, tu te rends compte qu'il est impossible à la méthode de connaitre le type que TU attends !
Code : Sélectionner tout - Visualiser dans une fenêtre à part list.toArray();
OK, on évite un double transtypage en lui indiquant le type final attendu.
C'est ça?
non...
Il est où le type là ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Object o = list.toArray();
Je veux dire dans le cas présent:
1)la méthode "toArray" crée un tableau d'"Object".
Code : Sélectionner tout - Visualiser dans une fenêtre à part String[] strings = (String[])list.toArray();
2)elle le remplie avec des "Object".
3)elle le renvoie.
1)la méthode "toArray" remplie le tableau spécifié avec des "String".
Code : Sélectionner tout - Visualiser dans une fenêtre à part String[] strings = (String[])list.toArray(new String[list.size()]);
2)elle le renvoie.
Donc avantage : on a directement un tableau du bon type.
C'est tout?
Partager