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 :

héritage et type de fille


Sujet :

Langage Java

  1. #1
    Membre confirmé Avatar de hadler
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Par défaut héritage et type de fille
    Bonjour à tous,

    J'ai un souci avec l'héritage de classes, et je pense d'ailleurs que ma question est un peu idiote, mais je ne comprend pas mon soucis

    alors voilà, j'ai une classe mère "Condition", qui est abstraite.

    J'ai créé plusieurs classes filles "BetweenCondition", "InCondition", ...

    Ensuite, dans mon application, je reçois un objet de Condition, et selon le type d'objet fille, je dois faire un traitement spécifique.

    J'utilisais la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monObjet.getClass().getName()
    ça fonctionne nickel quand je teste ma classe sous eclipse, par contre quand je mets mon code sru le serveur pour tester le résutltat dans ma jsp, la méthode ne fonctionne pas du tout, et j'ai droit à une magnifique erreur.

    Ma question est donc de savoir s'il existe une autre méthode que ça pour connaitre le type de fille que l'on a.

    J'ai bien pensé à un champs String final dans chaque classe fille qui indique le type ou le nom de la classe, mais ça me semble pas propre.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Citation Envoyé par hadler Voir le message
    ça fonctionne nickel quand je teste ma classe sous eclipse, par contre quand je mets mon code sru le serveur pour tester le résutltat dans ma jsp, la méthode ne fonctionne pas du tout, et j'ai droit à une magnifique erreur.
    Il faudrait que tu approfondisses la question parce là c'est franchement bizarre.

    Sinon, pour tester le type d'un objet, tu as l'opérateur instanceof

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Object obj;
    if(obj instanceof A) {
    	//le type réel de obj est A
    }
    else if(obj instanceof B) {
    	//le type réel de obj est B
    }

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Je pense que tu n'as pas tout à fait compris l'intérêt de l'héritage...

    Dans ton cas, tu n'as pas besoin de vérifier le type réel de ta classe.

    Il te suffit que ta classe Condition déclare une méthode abstraite "verifierCondition()" par exemple.

    Chacune de tes classes filles implémente cette méthode.

    Quand tu reçois une "Condition", tu appelles dessus cette méthode. Java fera le travail pour toi et choisiras la bonne implémentation (celle de la condition qui est réellement passée à ta méthode). C'est là tout l'intérêt des méthodes abstraites et du polymorphisme
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  4. #4
    Membre confirmé Avatar de hadler
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Par défaut

    En fait, je ne comprends pas l'erreur moi même.

    Je m'explique plus clairement. Je développe une application sous Struts. J'ai testé mon traitement avec ma classe Condition en utilisant une méthode "main" d'une de mes classes. Le traitement se réalise bien et me donne les bons résultats.

    Par contre, une fois que je transfère mes fichiers sur mon serveur pour tester mon application en ligne et voir le résutlat que ça donne, une instruction fait planter le tout. Et c'était justement le monObjet.getClass().getName() qui provoquait ça.

    Je n'étais pas au courant de la méthode instanceOf, je vias voir avec ça de suite.



    En fait si je comprends bien l'intêret de l'héritage, mais je ne peux pas décrire ma méthode dans les conditions fille.

    En fait, ma condition fille est un objet générique qui sert à déclarer une condition pour une clause Where.
    Si je mets mon traitement dans ma condition, il faut que la condition ai plusieurs méthode pour le traitement, selon le type de requête que l'utilisateur veut faire (SQL ou autre chose), ou alors je dois encore faire des classes filles pour chaque conditions.

    c'est pour ça que le traitement ne se trouve pas dans mes conditions, et que j'ai besoin de connaitre le type exacte de mes classes filles.

  5. #5
    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,

    Citation Envoyé par hadler Voir le message
    Par contre, une fois que je transfère mes fichiers sur mon serveur pour tester mon application en ligne et voir le résutlat que ça donne, une instruction fait planter le tout. Et c'était justement le monObjet.getClass().getName() qui provoquait ça.
    Et quel est l'erreur que tu obtiens lors de ce plantage ???

    Cela m'étonnerai que cela viennent de getClass().getName() donc je suppose que c'est monObject qui doit être null...

    a++

  6. #6
    Membre confirmé Avatar de hadler
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Par défaut
    justement non, le monObjet.getClass() me donne le bon résultat.

    C'est vraiment le getName() qui foire.

    Pour ce qui est de l'erreur, j'ai juste "internal servor error" et je ne connais pas le moyen d'afficher plus précisément les messages d'erreurs venant de Struts

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Citation Envoyé par hadler Voir le message
    justement non, le monObjet.getClass() me donne le bon résultat.

    C'est vraiment le getName() qui foire.
    Je suis perplexe. A moins que cette méthode ait été redéfinie. De quelle manière as-tu débogué pour être certain que le problème vient de getName() ?

  8. #8
    Membre confirmé Avatar de hadler
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Par défaut
    Tout d'abord, J'ai utilisé monObjet.getClass().getName() ==> erreur.

    J'ai donc décomposer mon instruction pour d'abord faire le getClass(), et ensuite le getName() en une seconde instruction. Ensuite j'ai mis ma commande getName() en commentaire pour voir ce que ça donnais.
    Résultat ==> aucune erreur.
    Par contre, quand je retire le commentaire, ça bug à nouveau.

    Enfin bon, avec l'opérateur instanceof ça marche nickel maintenant, même si ce n'est pas des plus jolis.

  9. #9
    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
    Citation Envoyé par hadler Voir le message
    Par contre, quand je retire le commentaire, ça bug à nouveau.
    Et on pourrait voir ce code ???

    Citation Envoyé par hadler Voir le message
    Enfin bon, avec l'opérateur instanceof ça marche nickel maintenant, même si ce n'est pas des plus jolis.
    Bof c'est pas pire qu'une comparaison avec le nom de la classe

    a++

  10. #10
    Membre confirmé Avatar de hadler
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Par défaut
    voici donc le code de ce que j'avais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String name =monObjet.getClass().toString() ;
    session.setAttribute("test", name) ;
    Ce morceau là marchait très bien. Voici donc le code quand ça ne fonctionnait plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String name =monObjet.getClass().getName() ;
    session.setAttribute("test", name) ;
    Le getClasse me donne bien la bonne classe, et c'est bien pour ça que je suis perdu, car je ne vois pas d'erreur là dedans.
    je n'utilise la variable dans la session que pour afficher son contenu dnas ma page .jsp.
    quand j'ai une erreur, je l'ai que je stock ma variable dans la session ou non.

    Enfin voilà, à moins d'une solution miracle, je continue à utiliser instanceof donc

  11. #11
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    En fait si je comprends bien l'intêret de l'héritage, mais je ne peux pas décrire ma méthode dans les conditions fille.

    En fait, ma condition fille est un objet générique qui sert à déclarer une condition pour une clause Where.
    Si je mets mon traitement dans ma condition, il faut que la condition ai plusieurs méthode pour le traitement, selon le type de requête que l'utilisateur veut faire (SQL ou autre chose), ou alors je dois encore faire des classes filles pour chaque conditions.

    c'est pour ça que le traitement ne se trouve pas dans mes conditions, et que j'ai besoin de connaitre le type exacte de mes classes filles.
    Je n'ai pas tout compris à ton problème, mais il me semble que la partie de phrase en gras est une bonne idée (ça te gêne d'avoir une hiérarchie à plusieurs niveaux ?) : cela s'appelle de la conception objet. L'utilisation de getClass et getName est en général inutile, sauf pour faire de l'introspection (encore faut-il en avoir l'utilité, ce qui n'est pas le cas ici).

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/07/2010, 15h17
  2. Réponses: 8
    Dernier message: 09/09/2008, 16h19
  3. Comment avoir plusieurs type de filles MDI ?
    Par arkhamon dans le forum Composants VCL
    Réponses: 3
    Dernier message: 12/11/2007, 18h15
  4. Héritage de type en SQL
    Par julie & manue dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/12/2006, 15h19
  5. [héritage] requête sur classe fille
    Par Galak extra dans le forum Hibernate
    Réponses: 3
    Dernier message: 25/08/2006, 10h30

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