C'est narmal : toArray() te retourne un tableau d'objects.
tu devrais copier ce tableau dans un tableau de BaseObject
Beno�t
PS : tu devrais mettre ton Class.forName(className) � l'ext�rieur de la
boucle while.
----- Original Message -----
From: "Aurelien Mazurie" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, January 10, 2003 1:44 PM
Subject: Typecasting et tableaux
>
> Bonjour � tous,
> J'ai toujours eu des probl�mes avec la gestion des types dans les
> tableaux en Java, mais l� je suis compl�tement bloqu�. Voil� ce que
> j'essaye d'obtenir: j'ai un objet qui peut contenir plusieurs autres
> objets de types variables, mais descendant tous d'une m�me classe
> (BaseObject). Ce que je veux faire, c'est r�cup�rer par exemple au sein
> de cette liste tous les objets d'une classe voulue (BaseObject ou
> descendant). Voil� ce que j'ai:
>
> ------------------------------------------------------------------------
> ------------
>
> ArrayList _list << liste h�t�rog�ne contenant mes objets
>
> public BaseObject[] getObjects (String className)
> {
> Iterator i = _list.iterator();
> ArrayList subset = new ArrayList();
>
> try
> {
> while (i.hasNext())
> {
> Object obj = i.next();
> if (Class.forName(className).isInstance(obj))
> {
> subset.add((BaseObject)obj);
> }
> }
> }
>
> catch (java.lang.ClassNotFoundException e)
> {
> return new BaseObject[0];
> }
>
> BaseObject[] objects = (BaseObject[])subset.toArray(new
> BaseObject[0]);
> Arrays.sort(objects, new ObjectComparator());
>
> return objects;
> }
>
> ------------------------------------------------------------------------
> ------------
>
> Sachant que l'argument className correspond au nom de la classe (du
> "type") de l'objet que je veux extraire de la liste. Par exemple,
> "core.object.BaseObject" ou "core.object.data.DataObject", avec
> DataObject un descendant de BaseObject.
>
> Cette m�thode fonctionne: c'est � dire que j'arrive bien � r�cup�rer
> les objets du type que je souhaite (je le vois dans une console Jython,
> o� tous les objets du tableau BaseObject[] renvoy� sont bien du type
> voulu). L� o� ca coince, c'est lorsque je veux faire un typecasting du
> tableau BaseObject[] qui m'est renvoy�.
> Par exemple, si j'ai s�lectionn� tous les objets de type DataObject, il
> me para�ssait normal de faire:
>
> DataObject[] dataObjects =
> (DataObject[])objectList.getObjects("core.object.data.DataObject");
>
> A priori en effet, le tableau BaseObject[] ne contient QUE des objets
> descendants de BaseObject, plus pr�cis�ment des DataObject. Et bien
> s�r, ca ne marche pas... Lors de la compilation, pas de probl�me, mais
> � l'ex�cution, j'ai un:
>
> Exception occurred during event dispatching:
> java.lang.ClassCastException: [Lcore.object.BaseObject;
>
> Arrg... Ais-je loup� quelque chose ?
>
> Aur�lien Mazurie