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

Répondre à