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

API standards et tierces Java Discussion :

[Jawin][VB]comment savoir ce que contient un objet ?


Sujet :

API standards et tierces Java

  1. #1
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 68
    Points : 72
    Points
    72
    Par défaut [Jawin][VB]comment savoir ce que contient un objet ?
    Bonjour,
    j'ai une méthode qui me renvoie un objet.
    Je n'ai aucun moyende savoir ce que peut être cet objet, ou ce qu'il contient mais j'aimerias bien le savoir.

    J'ai essayé le monObjet.getClass() et le monObjet.toString() et tout ce que j'obtient c'est :
    classe=class [Ljava.lang.Object;
    [Ljava.lang.Object;@69b332
    Pas très explicite.

    Ya til un moyen de regarder dans le ventre de la bete ?
    Ses variables, ses méthodes , ce genre de chose ?

    Merci pour votre aide

    [ Modéré par vedaer ]
    Ajout d'un tag dans le titre
    Les Règles du Forum

  2. #2
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut
    salut,
    pour connaitre la classe tu peux utiliser instanceof.
    sinon ce que tu as imprimé n'a rien de surprenant c'est la methode toString de Object qui a été appelé et qui a imprimé l'adresse en mémoire de ta classe.
    "Ce qui ne nous tue pas nous rend plus fort"
    Nietzsche

  3. #3
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 68
    Points : 72
    Points
    72
    Par défaut
    instanceOf() ? j'ai regardé dans la doc ça n'a pas l'air d'exister (mais j'ai pu me tromper)

    J'ai essayé monObjet.instanceOf() mais ça ne passe pas à la compil.

    Tu peux me donner la syntaxe de cette commande ?

    merci.

  4. #4
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut
    non ce n'est pas une methode c un mot clef java.
    tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    objet1 instanceof objet2
    et ça renvoit un boolean.
    bon courage!
    "Ce qui ne nous tue pas nous rend plus fort"
    Nietzsche

  5. #5
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 68
    Points : 72
    Points
    72
    Par défaut
    ben voui, mais le truc c'est que j'ai le début d'une idée de quel type d'objet ça peut bien e^tre, je vias pas me lancer dnas la comparaison de mon objet mystère avec tous les tpyes possible du monde.

    Ya pas un moyen de faire une éxécution pas à pas ou on verrait les variables et leur contenu au fur et à mesure de l'éxécution du programme ?

  6. #6
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut Re: comment savoir ce que contient un objet ?
    j'ai une méthode qui me renvoie un objet.
    Je n'ai aucun moyende savoir ce que peut être cet objet, ou ce qu'il contient mais j'aimerias bien le savoir.
    J'ignore comment tu fais pour récupérer un Objet dont tu ignores le types mais pour moi ca sent le gros problème de conception, style tu as un vector ou tu mets n'importe quoi dedans ...

    parce que instanceOf c'est bien mais si faut que tu te tapes tous les types d'objet Java et tes propres Objets, je te garantis que tu as pas fini de code ....

    Non sérieusement ce genre de problème c'est l'arbre qui cache la forêt, demandes toi plutot s'il n'est possible de faire autrement, et de savoir de quel type d'objet il s'agit parce que sinon ca devient vite ingérable[/code]
    Les deux principales inventions sorties de Berkeley sont UNIX et le LSD. Difficile de croire à une quelconque coïncidence - Jeremy S. Anderson

    Avant de vouloir qu’un logiciel soit réutilisable, il faudrait d’abord qu’il ait été utilisable - Ralph Johnson

  7. #7
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut
    tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //pour la classe
    Class maClasse = monObjet.getCless();
    String className = maClasse.getName();
    et ça te retourne le nom de la classe en String
    regarde la javadoc de la classe Class, il y a plein de methodes qui te permettent de récuperer des attributs, des methodes, des constructeurs...
    "Ce qui ne nous tue pas nous rend plus fort"
    Nietzsche

  8. #8
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 68
    Points : 72
    Points
    72
    Par défaut
    bon alors, pourquoi mon objet je peux pas savoir quel type c'est :

    En fait, je travaille sur une appli qui utilise des DLLs faites en VB.
    Pourquoi ? parce ces DLLs sont développées maison, et contiennent nombres de fonctions (notamment de calcul financier) qui seraient bcp trop long à redévelopper en java.

    J'utilise jawin (jawinproject.sourceforge.net) pour manipuler mes DLLs car certaines fonctions de ces DLLs renvoient des ADODB.recordset, des arrays, des variant (à la sauce VB) bref, le genre de chose casse bonbon à gérer avec JNI par exemple...

    Et donc dnas ce cas précis, le transtypage automatique de jawin ne marche pas, donc je le fais à la main, mais il est diffcile de deviner à l'aveuglette le type d'objet renvoyé (eh oui... pour bien amuser la galerie, j'ai pas els docs des DLLs en question)

    Sinon le getClass().getName() me renvoie :
    java.lang.Object....

    bon on va donc admettre que c'est un objet mystérieusement mystère.
    Mais je serias très intéressé de savoir ce qu'il peut bien contenir comme variable ?

    Ya pas un mode debug en java ? ou on pourrait voir les données au fur et à mesure de l'éxécution du porgramme pas à pas ?

  9. #9
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //pour la classe
    Class maClasse = monObjet.getClass();
    String className = maClasse.getName();
    j'ai vérifié et getName() renvoit bien un String sous forme d'un Object donc tu devrais le caster en String.
    bref tout ça ne servira à rien dans ton cas car c trop vaste.
    "Ce qui ne nous tue pas nous rend plus fort"
    Nietzsche

  10. #10
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Et jawin n'a pas des méthodes permettant de connaître le type de l'objet VB?
    Bien le bonjour chez vous
    Jowo

  11. #11
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par blaz
    Sinon le getClass().getName() me renvoie :
    java.lang.Object...
    Alors ton objet est de type Object

    Citation Envoyé par blaz
    J'ai essayé le monObjet.getClass() et le monObjet.toString() et tout ce que j'obtient c'est :
    classe=class [Ljava.lang.Object;
    Dans ce cas, ton object est de type Object[] (tableau d'Object)

  12. #12
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    De meme en lisant la doc de la class java.lang.Class tu verras qu'il t'es possible d'avoir des references sur les methodes (java.lang.reflect.Method) et les valeurs (java.lang.reflect.Field) de la classe (static) et/ou de l'instance (non-static) et eventuellement de leur classe parente/ancetre.

    En utilisant la classe Field tu peux extraire les valeurs de l'objet ; bien sur il faut faire attention au niveau de protection (public, protected, ...) sous peine de declencher des exceptions. La aussi un instanceof permet de determiner le type de la valeur edit - retournee par la methode get() ou par l'une des autres methodes "de facilite" (voir peut-etre aussi getGenericType() dans Java 5.0).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  13. #13
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut Quand un doigt montre le ciel, l'imbécile regarde le doigt .
    j'aime beaucoup cette citation ...

    Et si vous ne cherchiez pas au bon endroit ..... seul jowo a cherché à côté du problème demandé ? ... et ben ....

    Et si la solution se trouvait ailleur ? Pour ceux qui connaissent les JDBC et les ResultSet ..... Vous voyez ce que je veux dire ?

    Blaz, essaye de trouver sur le net 1 class qui a déjà été implémentée et qui récupère les données en question .... Tu ne dois pas être le premier à avoir eu ce genre de problèmes et certaines âmes charitables distribuent volontier leur codes sources .... ( "Comment ça j'en fais pas partie ? ... nan mais bon .. chacun sa fierté, moi C mon code ... )

    En gros, tu as deux éléments programmés pour interagir, mais dans 2 langages différents .... Cherche s'il n'existe pas un élément qui puisse être palacé entre les 2 pour formater ou transtyper les données (que ce soit 1 classe ou 1 autre DLL ...)

    Voila .... la Vérité se trouve parfois au bord du chemin, et celui qui a décidé de prendre le train se trouve bien ennuyé : il tourne en rond (ouaip .. chez moi les rails de chemin de fer font le tour de la Terre, ET ALORS ?
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  14. #14
    duj
    duj est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Points : 474
    Points
    474
    Par défaut
    Salut,

    le type de ton objet es visiblement un tableau d'objets, comme on te l'a dit.

    Pour connaitre les type des objets qu'il contient, si il n'est pas de taille zero, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Object[] tab = (Object[]) monObjet;
    System.out.println(tab.length); // la taille du tableau
    for(int i = 0; i< tab.length;i++){
      Object o = tab[i];
      System.out.println(o.getClass());
      ....
    }
    Parfois, Google fait des miracles

  15. #15
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Le problème est que les intervenants, que je suis, n'ont pas pris le probème par le bon bout.

    En effet, en Java, tous les objects sont une instance de la Classe Object vu que cette dernière peut être désignée comme la SUPER-CLASSE et toutes les classes.

    Voici un exemple
    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
     
    private static Object[] getObjectArray() {
       Integer[] ia = new Integer[3];
       for (int i = 0; i < ia.length; ++i) {
          ia[i] = new Integer(i+1);
       }
     
       return (Object [])ia; // Type casting pas nécessaire
    }
     
    public static void main(String[] args) {
       Object[] oa = getObjectArray();
     
       System.out.println(oa);
       Object o = oa[0];
       System.out.println(o);
       System.out.println(o.getClass().getName());
       if (o instanceof Object) {
          System.out.println("Instance Of Object");
       }
     
       if (o instanceof Integer) {
          System.out.println("Instance Of Integer");
       }
     
       Integer i = (Integer)o;
       System.out.println(i.intValue());
    }
    La sortie est:
    [Ljava.lang.Integer;@11a698a
    1
    java.lang.Integer
    Instance Of Object
    Instance Of Integer
    1
    On remarque la classe d'origine est conservée.

    Donc ton problème me paraît bizarre. Les objets retournés ne possèdent pas d'information autre que celle de le classe Object.
    Bien le bonjour chez vous
    Jowo

  16. #16
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 68
    Points : 72
    Points
    72
    Par défaut MErci à tous
    Un grand Merci à tous pour vos réponses nombreuses.

    Pour répondre en vrac,

    jowo ->
    jawin crée une espèce "d'enveloppe java" pour chaque objet et fonctions VB d'une DLL, mais dans le cas de cette fonction précise, ça n'aviat pas fonctionné et donc je devias faire de la divination pour le faire à saplace (je rapelle que je n'ai pas les docs techniques de la DLL)

    Neptus ->
    merci pour tes conseils de Jedi

    bouye->
    merci de ces références, j'ai appris des choses, même si dnas le cas ed ce post ça ne m'a pas (encore) servi.

    hervé91 & duj->
    merci pour votre précision sur le fait que c'était un array d'object qui m'était retourné car là est la solution. (détail qui m'avait échappé)
    En effet, après j'ai commencé à boucler sur les cases de cet arrays, pour me rendre compte, qu'il contenait des ... strings, mais castés en tant qu'objet.
    C'était ça la clé du mystère, c'était un tableau d'objets qui sont en fait des strings.

    Encore une fois, merci à tous pour votre aide.

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

Discussions similaires

  1. [Vxi3] Pb pour savoir ce que Contient une cellule
    Par Benouche20 dans le forum Webi
    Réponses: 3
    Dernier message: 21/05/2012, 11h52
  2. Réponses: 4
    Dernier message: 10/12/2009, 20h29
  3. Réponses: 13
    Dernier message: 09/04/2009, 13h23
  4. comment savoir ce que fait mon pointeur??
    Par elekis dans le forum C++
    Réponses: 9
    Dernier message: 30/11/2004, 12h42
  5. [Trigger] comment savoir que la bd a ete modifiee
    Par corwin_d_ambre dans le forum Bases de données
    Réponses: 7
    Dernier message: 13/02/2004, 12h50

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