Voici un exemple qui marche :
import java.lang.reflect.*;
import java.util.*;
class A
{
}
class B extends A
{
}
public class Essai
{
static A[] getObjects(Object[] list, Class aclass)
{
Vector v = new Vector();
for(int i=0; i<list.length; i++)
{
if (aclass.isInstance(list[i]))
v.add(list[i]);
}
A[] result = (A[]) Array.newInstance(aclass, v.size());
for(int i=0; i<v.size(); i++)
{
Array.set(result, i, v.elementAt(i));
}
return result;
}
public static void main(String[] args)
{
Object[] list = {new B(), new B(), new B()};
A[] as = getObjects(list, B.class);
B[] bs = (B[]) as;
}
}
-----Message d'origine-----
De : Aurelien Mazurie [mailto:[EMAIL PROTECTED]]
Envoy� : vendredi 10 janvier 2003 15:00
� : [EMAIL PROTECTED]
Objet : Re: Typecasting et tableaux
Merci pour toutes ces r�ponses !
Bon, la mauvaise nouvelle: ca ne marche pas plus qu'avant... Snif ! A
l'ex�cution, j'ai strictement la m�me erreur qui m'indique que mon
typecasting BaseObject[] -> DataObject[] est interdit, m�me si
DataObject est descendant de BaseObject et si BaseObject[] ne contient
que des DataObject.
Mais je viens de r�fl�chir � un truc: peut �tre qu'�crire
> BaseObject[] objects =
> (BaseObject[])Array.newInstance(c,subset.size());
> subset.toArray(objects);
> return objects;
> }
n'est-il pas suffisant ?
En effet, le tableau "objects" que je cr�e, et qui va donc re�evoir mes
objets tri�s selon leur type, est bien encore et toujours de type
BaseObject[]. La commande Array.newInstance() me cr�e bien un tableau
du type voulu, mais ce tableau est illico stock� dans objects, et donc
"redevient" un BaseObject[] !?
Or je suis a priori bien oblig� d'indiquer un type pour objects, afin
de passer le r�sultat... Pensez-vous que le probl�me soit l� ? J'ai
essay� de d�clarer objects ainsi:
c[] objects = ...
Mais c, m�me s'il contient l'information du type voulu, est lui-m�me un
objet de type Class et ne convient donc pas.
Aur�lien Mazurie