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 :

instanceof sans connaitre la classe


Sujet :

Langage Java

  1. #1
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut instanceof sans connaitre la classe
    Bonjour,

    je souhaiterais utiliser instanceof dans une methode definie dans une classe mere,
    mais verifier que tel objet est une instance de la classe derivee.
    Je m'explique,
    Une classe mere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Mere(){
    	public boolean equals(Object o){
    	    if (o instanceof Mere){
                      //..........
    	        return true;
    	    }else{
    	       return false;
    	}
    }
    une classe fille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Fille extends Mere(){
    //.........
    }
    un appel a equals:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fille fille1=new Fille();
    Fille fille2=new Fille();
    boolean bool=fille1.equals(fille2);
    Mais comment faire pour verifier qu'il s'agit bien d'une instance de Fille et pas (seulement) de Mere

    j'ai pensé à comparer les classes comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		if (o.getClass()==this.getClass()){
    			return true;
    		}
    Mais je suis pas sur de mon coup.
    Qu'en pensez-vous ?

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Puisque (a priori) ta méthode "equals" se base uniquement sur des attributs de la classe mère, quel est l'intérêt de vouloir vérifier que l'instance comparée est bien de la classe fille ?!... mais bon sinon tu peux toujours redéfinir la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class Fille extends Mere() {
      public boolean equals(Object o){
        return (o instanceof Fille) && super.equals(o);
    }

  3. #3
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Citation Envoyé par g_rare
    Puisque (a priori) ta méthode "equals" se base uniquement sur des attributs de la classe mère, quel est l'intérêt de vouloir vérifier que l'instance comparée est bien de la classe fille ?!... mais bon sinon tu peux toujours redéfinir la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class Fille extends Mere() {
      public boolean equals(Object o){
        return (o instanceof Fille) && super.equals(o);
    }
    Justement je veux eviter de la redefinir. L'interet est de pouvoir creer une seule methode equals pour tous les elements derives d'une classe.
    Mais si j'ai une classe Mere et deux classes Fille1 et Fille2 je veux que si on execute un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fille1 f1=new Fille1();
    Fille2 f2=new Fille2();
    boolean bool=f1.equals(f2);
    que le booleen ait comme valeur false

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par willoi
    Justement je veux eviter de la redefinir. L'interet est de pouvoir creer une seule methode equals pour tous les elements derives d'une classe.
    Mais si j'ai une classe Mere et deux classes Fille1 et Fille2 je veux que si on execute un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fille1 f1=new Fille1();
    Fille2 f2=new Fille2();
    boolean bool=f1.equals(f2);
    que le booleen ait comme valeur false
    Je trouverais plutôt logique que le boolean aie une valeur true avec un code pareil... un constructeur est tout de même censé constuire des objets identiques si on l'appelle deux fois les mêmes paramètres...

    Est-ce que tu ne confonds pas la comparaison par equals et celle par == ?

  5. #5
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Citation Envoyé par wichtounet
    Je trouverais plutôt logique que le boolean aie une valeur true avec un code pareil... un constructeur est tout de même censé constuire des objets identiques si on l'appelle deux fois les mêmes paramètres...

    Est-ce que tu ne confonds pas la comparaison par equals et celle par == ?
    Bon si tu veux on aurait ca plutot comme genre d'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class Fille1 extends Mere(){
    public String attribut_fille1;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class Fille2 extends Mere(){
    public String attribut_fille2;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Fille1 f1=new Fille1();
    f1.attribut_fille1="xxxx";
    Fille2 f2=new Fille2();
    f2.attribut_fille2="yyyy";
    boolean bool=f1.equals(f2);
    dans ce cas il ne peuvent etre egaux ??

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Class.isAssignableFrom() devrait repondre à ton besoin.

    Mais bon, le principe, c'est quand meme de redefinir la methode equals()

  7. #7
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    alors dans ce cas y'a-t-il une difference entre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (o.getClass().isAssignableFrom(this.getClass())){}
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (o.getClass()==this.getClass()){}

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    alors dans ce cas y'a-t-il une difference
    Oui.

    Par exemple si this est de la classe Fille, et o de la classe Mere, isAssignableFrom return true, ce que tu n'as pas dans l'autre cas.

Discussions similaires

  1. Instancier une classe sans connaitre son nom
    Par Molkobain dans le forum Langage
    Réponses: 8
    Dernier message: 16/02/2009, 14h49
  2. Insertion sans connaitre la structure
    Par Alexandre T dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/10/2005, 10h58
  3. Créer un buffer sans connaitre la taille?
    Par barucca dans le forum C++
    Réponses: 11
    Dernier message: 28/04/2005, 20h56
  4. Lister le contenu d'une table sans connaitre ses champs
    Par Google.be dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 30/03/2004, 15h23

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