OVH Cloud OVH Cloud

Transtypage

7 réponses
Avatar
Jean Luc BOUGEARD
Bonjour

J'ai stocké dans un object Arraylist des object de différents types (String
, int.).
Comment fait-on pour transformer un objet de type Object en int ?

Je pense que c'est une question récurrente.

Merci d'avance.

jlb

7 réponses

Avatar
Unknown
Le Wed, 09 Jun 2004 16:31:57 +0200, Jean Luc BOUGEARD a écrit :

Bonjour

J'ai stocké dans un object Arraylist des object de différents types (String
, int.).
Comment fait-on pour transformer un objet de type Object en int ?


Object o = monArrayList.get(i);
int res;
if ( o instanceof Integer )
res = ((Integer)o).intValue();

Avatar
captainpaf
Jean Luc BOUGEARD a formulé ce mercredi :
Bonjour

J'ai stocké dans un object Arraylist des object de différents types (String
, int.).
Comment fait-on pour transformer un objet de type Object en int ?

Je pense que c'est une question récurrente.

Merci d'avance.

jlb


Salut,

tu utilises quelle version du JDK ?
Parce que si tu utilises une version < à 1.5 (après je ne sais pas...),
tu n'as pas pû stocker des int dans ton ArrayList puisque int n'est pas
un Object. L'object équivalent est Integer.
Ensuite c'est sûrement pas une très bonne idées de socker des object de
différents type dans une ArrayList. Une collection par définition
contient des object de même famille.
Et enfin pour répondre à ta question, il te suffit de faire une cast
pour pouvoir utiliser les méthodes de la class de l'object concerné.
Par exemple sur le premier object de type Integer.
Integer tonNombre = (Integer)list.get(0);
Attention au castClassException que tu risques de rencontrer avec des
object de types différents.

Avatar
jean Luc BOUGEARD
captainpaf wrote:
Jean Luc BOUGEARD a formulé ce mercredi :

Bonjour

J'ai stocké dans un object Arraylist des object de différents types
(String
, int.).
Comment fait-on pour transformer un objet de type Object en int ?

Je pense que c'est une question récurrente.

Merci d'avance.

jlb



Salut,

tu utilises quelle version du JDK ?
Parce que si tu utilises une version < à 1.5 (après je ne sais pas...),
tu n'as pas pû stocker des int dans ton ArrayList puisque int n'est pas
un Object. L'object équivalent est Integer.
Ensuite c'est sûrement pas une très bonne idées de socker des object de
différents type dans une ArrayList. Une collection par définition
contient des object de même famille.
Et enfin pour répondre à ta question, il te suffit de faire une cast
pour pouvoir utiliser les méthodes de la class de l'object concerné.
Par exemple sur le premier object de type Integer.
Integer tonNombre = (Integer)list.get(0);
Attention au castClassException que tu risques de rencontrer avec des
object de types différents.




Quelle est la meilleure solution pour stocker des object de différents
types. Avant j'utilisais la class Vector, mais il n'est plus recommandé
de l'utiliser ?


Avatar
Farid
Quelle est la meilleure solution pour stocker des object de différents
types. Avant j'utilisais la class Vector, mais il n'est plus recommandé
de l'utiliser ?


vector marche tres bien, mais vu que c'est synchronise (necessaire lorsque
accede par differentes thread) tu perds en performance...
donc a n'utiliser que si tu bosses dessus avec des threads.

une list (ArrayList par example) fait l'affaire en general.
mais ne marche pas avec des objects de type genre int,char..etc...
qui ont de toutes facon si necessaire des equivalent object (Interger,...)
apres tu peux faire des instanceof...

l'ideal c'est d'avoir une structure object et d'implementer des methodes
genre checkType(...) etc, ce qui evite les instanceof qui coute un peu en
terme de perf.
mais bon si l'application est simple, les instanceof marche tres bien..

y a aussi les hashmap, si ca s'applique a ton application..

Farid.

Avatar
captainpaf
Farid a formulé la demande :
Quelle est la meilleure solution pour stocker des object de différents
types. Avant j'utilisais la class Vector, mais il n'est plus recommandé
de l'utiliser ?


vector marche tres bien, mais vu que c'est synchronise (necessaire lorsque
accede par differentes thread) tu perds en performance...
donc a n'utiliser que si tu bosses dessus avec des threads.

une list (ArrayList par example) fait l'affaire en general.
mais ne marche pas avec des objects de type genre int,char..etc...
qui ont de toutes facon si necessaire des equivalent object (Interger,...)
apres tu peux faire des instanceof...

l'ideal c'est d'avoir une structure object et d'implementer des methodes
genre checkType(...) etc, ce qui evite les instanceof qui coute un peu en
terme de perf.
mais bon si l'application est simple, les instanceof marche tres bien..

y a aussi les hashmap, si ca s'applique a ton application..

Farid.


ArrayList est très bien.
Par contre je te déconseil l'utilisation de instanceof même pour les
applications simples. Si l'application est simple, tu ne perdra pas
beaucoup de temps à la développer correctement sans bidouilles d'aucune
sorte.


Avatar
jean Luc BOUGEARD
captainpaf wrote:

Farid a formulé la demande :

Quelle est la meilleure solution pour stocker des object de différents
types. Avant j'utilisais la class Vector, mais il n'est plus recommandé
de l'utiliser ?



vector marche tres bien, mais vu que c'est synchronise (necessaire
lorsque
accede par differentes thread) tu perds en performance...
donc a n'utiliser que si tu bosses dessus avec des threads.

une list (ArrayList par example) fait l'affaire en general.
mais ne marche pas avec des objects de type genre int,char..etc...
qui ont de toutes facon si necessaire des equivalent object
(Interger,...)
apres tu peux faire des instanceof...

l'ideal c'est d'avoir une structure object et d'implementer des methodes
genre checkType(...) etc, ce qui evite les instanceof qui coute un peu en
terme de perf.
mais bon si l'application est simple, les instanceof marche tres bien..

y a aussi les hashmap, si ca s'applique a ton application..

Farid.



ArrayList est très bien.
Par contre je te déconseil l'utilisation de instanceof même pour les
applications simples. Si l'application est simple, tu ne perdra pas
beaucoup de temps à la développer correctement sans bidouilles d'aucune
sorte.


Merci à tous.

Au boulot...



Avatar
Francis JUGE-BOIRARD
Bonjour,
Attention :
ArrayList<Integer> ar = new ArrayList<Integer> ();
ar.add (10); // Erreur si JDK < 1.5 valide si JDK = 1.5.

De plus toujours à partir de la 1.5
ar.get (0); // Retournera un Integer.

Les problèmes de cast vont donc se faire de plus en plus discret.

Francis JUGE-BOIRARD