IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Transtypage Object->Derivé d'object


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Par défaut Transtypage Object->Derivé d'object
    Bonjour a tous, et désolé pour le titre non explicite

    J'ai une question qui me tarode l'esprit depuis quelques temps;

    Tout d'abord, j'ai cherché en vain une methode qui permet de redimensionner un tableau d'objet tout en preservant ces valeurs. Si une fonction tels que celle ci existe, je suis preneur

    En tout cas, voilà ce que j'utilise pour redimensionner un tableau d'objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
             public void Salarie_ReDim(int size)
    	{
    		DADSU_Salarie[] ArrayTemp = new DADSU_Salarie[size];
     
    		if(size == Salaries.length) 
    			return;
     
    		for(int i = 0; i<(size<Salaries.length?size:Salaries.length); i++)
    			ArrayTemp[i] = Salaries[i];
     
    		Salaries = ArrayTemp;
    	}
    Cela marche tres bien, mais comme vous le voyez, chaque fonctions s'applique a un type de donnée bien distinct.

    Or j'ai plusieurs type d'objet, et j'aimerai ne pas repeter ma fonction une fois par type d'objet. J'utilise donc cela, mais sa ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	public static Object[] ReDim (Object[] obj, int count)
    	{
    		Object[] ArrayTemp = new Object[count];
     
    		if(count == obj.length) 
    			return obj;
     
    		for(int i = 0; i<(count<obj.length?count:obj.length); i++)
    			ArrayTemp[i] = obj[i];
     
    		return ArrayTemp;
    	}
    Lorsque j'utilise cela de cette façon:

    Salaries = (DADSU_Salaries)Tools.ReDim(Salaries,Salaries.length+1);
    Il compile puis me lance une exception "Invalid TypeCast"

    Puis-je savoir pourquoi? Et encore mieux, quelqu'un a-t-il une reponse?

    Merci d'avance!

    PS: C'est un travail que je doit rendre en toute urgence

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Par défaut Re: Transtypage Object->Derivé d'object
    Citation Envoyé par anykeyh
    Bonjour a tous, et désolé pour le titre non explicite

    J'ai une question qui me tarode l'esprit depuis quelques temps;

    Tout d'abord, j'ai cherché en vain une methode qui permet de redimensionner un tableau d'objet tout en preservant ces valeurs. Si une fonction tels que celle ci existe, je suis preneur

    En tout cas, voilà ce que j'utilise pour redimensionner un tableau d'objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
             public void Salarie_ReDim(int size)
    	{
    		DADSU_Salarie[] ArrayTemp = new DADSU_Salarie[size];
     
    		if(size == Salaries.length) 
    			return;
     
    		for(int i = 0; i<(size<Salaries.length?size:Salaries.length); i++)
    			ArrayTemp[i] = Salaries[i];
     
    		Salaries = ArrayTemp;
    	}
    Cela marche tres bien, mais comme vous le voyez, chaque fonctions s'applique a un type de donnée bien distinct.

    Or j'ai plusieurs type d'objet, et j'aimerai ne pas repeter ma fonction une fois par type d'objet. J'utilise donc cela, mais sa ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	public static Object[] ReDim (Object[] obj, int count)
    	{
    		Object[] ArrayTemp = new Object[count];
     
    		if(count == obj.length) 
    			return obj;
     
    		for(int i = 0; i<(count<obj.length?count:obj.length); i++)
    			ArrayTemp[i] = obj[i];
     
    		return ArrayTemp;
    	}
    Lorsque j'utilise cela de cette façon:

    Salaries = (DADSU_Salaries)Tools.ReDim(Salaries,Salaries.length+1);
    Il compile puis me lance une exception "Invalid TypeCast"

    Puis-je savoir pourquoi? Et encore mieux, quelqu'un a-t-il une reponse?

    Merci d'avance!

    PS: C'est un travail que je doit rendre en toute urgence
    Et comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DADSU_Salaries[] salaries = (DADSU_Salaries[])Tools.ReDim(Salaries,Salaries.length+1);

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exception: 
     
    java.lang.ClassCastException
    	at cian.dadsu.DADSU_Entreprise.AddEtablissement(DADSU_Entreprise.java:40)
    	at cian.dadsu.DADSU.Traitement(DADSU.java:184)
    	at cian.dadsu.application.CianDADSU$5.actionPerformed(CianDADSU.java:404)

  4. #4
    FFF
    FFF est déconnecté
    Membre éclairé Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Par défaut Re: Transtypage Object->Derivé d'object
    Citation Envoyé par anykeyh
    Tout d'abord, j'ai cherché en vain une methode qui permet de redimensionner un tableau d'objet tout en preservant ces valeurs. Si une fonction tels que celle ci existe, je suis preneur
    Il me semble que la classe Vector peut répondre à ton problème. Elle permet de créer un équivalent de tableau dont la taille peut changer en plus ou en moins.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Par défaut Re: Transtypage Object->Derivé d'object
    Citation Envoyé par FFF
    Citation Envoyé par anykeyh
    Tout d'abord, j'ai cherché en vain une methode qui permet de redimensionner un tableau d'objet tout en preservant ces valeurs. Si une fonction tels que celle ci existe, je suis preneur
    Il me semble que la classe Vector peut répondre à ton problème. Elle permet de créer un équivalent de tableau dont la taille peut changer en plus ou en moins.
    Oui le problème c'est que Vector est thread-safe donc plus couteux, utilises donc ArrayList

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Ton problème vient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object[] ArrayTemp = new Object[count];

    Tu crées un tableau d'objet que tu castes ensuite en tableau de DADSU_Salaries... Or ceci n'est pas possible car ton tableau d'Objet peut très bien contenir d'autre type d'objet !


    Il faut créer ce tableau dynamiquement à partir du type réel de ton tableau. Pour cela il faut utiliser l'API de reflection et en particulier la méthode getComponentType() qui te renvoit le type de contenu du tableau, puis Array.newInstance() pour créer le tableau.

    Je te conseille aussi de vérifier la taille avant de créer le tableau afin d'éviter une allocation inutile, ainsi que de calculer la longueur max une seule fois plutôt qu'à chaque itération de ton for :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static Object[] ReDim (Object[] obj, int count)
    {
    	if(count == obj.length)
    		return obj;
     
    	Object[] ArrayTemp = (Object[]) Array.newInstance(
    		obj.getClass().getComponentType(), count);
     
     
    	for(int i = 0, max=(count<obj.length?count:obj.length); i<max; i++)
    		ArrayTemp[i] = obj[i];
     
    	return ArrayTemp;
    }
    Maintenant si ton tableau doit changer de taille, pourquoi ne pas utiliser directement une ArrayList ???

    a++

  7. #7
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Par défaut
    Parceque je ne connaissais pas ArrayList

    Lol merci pour vos reponses je modifie ça de suite

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Profites en pour lire la partie concernant les Structures de données -Tableaux et collections dans la FAQ Java...

    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Transtypage par reflection sur un object inconnu
    Par jpbelmondo59 dans le forum C#
    Réponses: 2
    Dernier message: 07/05/2015, 17h03
  2. Réponses: 0
    Dernier message: 22/02/2010, 10h36
  3. Trouver un object dans une listof( object)
    Par richton95 dans le forum VB.NET
    Réponses: 2
    Dernier message: 12/05/2009, 11h47
  4. Votre avis : ActiveX Data Object ou Data Access Object ?
    Par jfdmagic dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 21/04/2009, 09h36
  5. Appel un object dans Tableau d'objects
    Par aristeas dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 22/11/2008, 22h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo