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

Langage Java Discussion :

Comment caster un objet contenant une propriété de type byte[]


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Points : 24
    Points
    24
    Par défaut Comment caster un objet contenant une propriété de type byte[]
    Bonjour à tous,

    je bute sur un problème bien étrange. Voici ce qui se passe :

    j'ai construis une classe me permettant d'instancier des objets "PieceJointe".

    Un objet PieceJointe possède les propriété suivantes:
    - un nom : String
    - un type : String
    - un document : byte[]

    Jusque là tout va bien. J'arrive à instancier des objets "PieceJointe" sans soucis, il possède bien un nom, un type, et les documents (quel qu'il soit : doc,...) sont bien pris en compte. Je peux récupérer, à tout moment les valeurs des ces propriétés par des getters et cela fonctionne.

    Par exemple, je peux les afficher en console et pour chacune d'elle j'obtiens une valeur (que ce soit une chaine de caractères pour les deux premières priorités ou un chiffre hexa pour la dernière)

    Par contre, lorsque j'essaye de comparer deux objet de type PieceJointe pourtant identiques, j'obtiens toujours false .

    Je procède de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
          Je possède deux objets PieceJointe, alimenter avec les mêmes attributs : pj1 et pj2.
    
           J'ai réécris la méthode equals pour le type pieceJointe:
    
    public boolean equals(Object o){
    
         try{
             PieceJointe pj = (PieceJointe)o
             return this.nom.equals(pj.getNom()) && this.type.equals(pj.getType()) 
                      && Arrays.equals(this.document,pj.getDocument());
         }catch(Exception e){
             return false;
         }
    }
    
          Lorsque j'utilise cette méthode et que j'affiche le résultat en console, j'obtiens false :
          System.out.println(pj1.equals(pj2)); => donne false
    J'ai donc creusé plus loin de manière à cibler laquelle des trois propriétés des objets PieceJointe posait problème : il s'agit de la propriété document de type byte[].

    En réalité, si je place la ligne de code suivante dans ma méthode equals (avant le return):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println(pj.getDocument);
    J'obtiens la valeur null. Pourtant, si avant d'appeler ma méthode equals, j'affiche en console la valeur de la propriété document de pj2 et de pj1, j'obtiens bien une valeur identique...

    Il semblerait donc que le fait caster l'objet passer en paramètre à la méthode equals depuis le type Object vers le type PieceJointe pose problème. Plus précisément, il semble qu'il ne soit pas possible de caster un byte[].

    Voilà, je suis un peu perdu, qu'en pensez vous ?

    Bien à vous,

    Samuel.

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Tu ne cast pas un type byte, mais un type PieceJointe.

    Cela fonctionne parfaitement. Si ton objet est null, c'est qu'il est mis à null quelque part.

    Voici une demo qui montre que cela fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    import java.util.Arrays;
     
    public class PieceJointe {
     
    	private String nom;
    	private String type;
    	private byte[] document;
     
    	public static void main(String[] args) {
    		byte[] b1 = { 0, 1, 2 };
    		PieceJointe pj1 = new PieceJointe("nom 1", "type 1", b1);
    		byte[] b2 = { 0, 1, 2 };
    		PieceJointe pj2 = new PieceJointe("nom 1", "type 1", b2);
    		System.out.println(pj1.equals(pj2));
    	}
     
    	public PieceJointe(String nom, String type, byte[] document) {
    		this.nom = nom;
    		this.type = type;
    		this.document = document;
    	}
     
    	public boolean equals(Object o){
    	     PieceJointe pj = (PieceJointe) o;
    	     try{
    	         return this.nom.equals(pj.getNom()) 
    	         	&& this.type.equals(pj.getType()) 
    	         	&& Arrays.equals(this.document, pj.getDocument());
    	     }catch(Exception e){
    	         return false;
    	     }
    	}
     
     
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getType() {
    		return type;
    	}
     
    	public void setType(String type) {
    		this.type = type;
    	}
     
    	public byte[] getDocument() {
    		return document;
    	}
     
    	public void setDocument(byte[] document) {
    		this.document = document;
    	}
     
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Salut visiwi,

    Merci pour ta réponse !

    Effectivement, une erreur de débutant... pourtant je m'y attendais.

    En fait, ce que je faisais n'est pas tout à fait identique à ce que j'ai expliqué dans mon exemple.

    En réalité, je testais bien l'équivalence de plusieurs pièces jointes mais plusieurs d'entre elles étaient issues du mapping associé à une requête en base. Malheureusement cette requête ne récupérait pas le document de la pièce jointe. Ainsi à la création de la pièce jointe associée, la propriété document de l'objet était laissée à null...

    Bref merci encore pour ta réponse, elle m'aura bien aidée à débugger

  4. #4
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    De rien
    @+

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

Discussions similaires

  1. [AC-2010] Création d'un objet contenant une propriété de type liste
    Par alain_bubu dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/01/2015, 23h26
  2. [Entity] Comment exposer un webservice renvoyant un objet contenant une collection<objet>
    Par igorzup dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 05/10/2012, 11h48
  3. Réponses: 15
    Dernier message: 21/05/2010, 00h36
  4. Réponses: 2
    Dernier message: 24/04/2009, 11h45
  5. Comment Manipuler des objets dans une liste de type TList ?
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 1
    Dernier message: 02/11/2006, 15h40

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