Une petite disgression pour commencer :
Tu peux avoir la classe sans passer par le nom :
core.object.data.DataObject.class
est �quivalent �
Class.forName("core.object.data.DataObject")
sans les exceptions.
Ton probl�me est le suivant :
Il y a un type pour les �l�ment mais il y a un type pour le tableau aussi.
Et un tableau de Number n'est pas un Tableau d'Integer.
Si j'�cris :
Number tab[] = new Number[2];
tab[0] = new Integer(0);
tab[1] = new Integer(1);
Integer tabInt = (Integer[])tab;
C'est un cast ill�gale, puisque la tableau n'est pas un tableau d'Integer
mais bien de Number m�me s'il ne contient que des Integer.
Bref, tu dois construire un tableau li� � la classe pass�e en param�tre.
public BaseObject[] getObjects (String className) throws
java.lang.ClassNotFoundException {
return getObjects(Class.forName(className));
}
public BaseObject[] getObjects (Class c)
{
Iterator i = _list.iterator();
ArrayList subset = new ArrayList();
try
{
while (i.hasNext())
{
Object obj = i.next();
if (c.isInstance(obj))
{
subset.add((BaseObject)obj);
}
}
}
catch (java.lang.ClassNotFoundException e)
{
return new BaseObject[0];
}
BaseObject[] objects =
(BaseObject[])Array.newInstance(c,subset.size());
subset.toArray(objects);
return objects;
}
--------------------------------------------------------------------
Erik Mazoyer, Chef de projet
HyperOffice
6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
T�l. 01 41 96 96 76
Fax 01 41 96 96 77
M�l [EMAIL PROTECTED]
-----Message d'origine-----
De : Aurelien Mazurie [mailto:[EMAIL PROTECTED]]
Envoy� : vendredi 10 janvier 2003 13:45
� : [EMAIL PROTECTED]
Objet : 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