HashMap

Résolu
velocity Messages postés 251 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,
J'ai besoin d'aide en java,

j'ai deux classe deux classe qui herite de la meme super classe:
class A extends C;
class B extends C;

je veux créer une HashMap qui contient des instance des classe A et B mais je ne sais pas comment faire .
j'ai essayer de faire HashMap liste = new HashMap<C,Cible>; mais ce ne marche pas lorsque je veut ajouter un objet A ou B;

comment je doit faire ?

merci d'avance pour votre aide

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Au niveau de la syntaxe il faut préciser les types des deux côtés :
    HashMap<C,Cible> liste = new HashMap<C,Cible>();

    Mais lorsque tu récupères un élément avec get(key), l'objet de retour sera du type de key, donc c'est les méthodes hashCode puis equals de l'objet key (donc de A ou de B) qui seront appelées. Il faut que tu les redéfinisse !
    La confiance n'exclut pas le contrôle
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Exemple de code, j'ai mis des affichages dans equals et hashCode pour bien voir si c'est celles de A, B ou C qui sont appelées...

      import java.util.HashMap;
      
      class A extends C
      {
          int a;
          
          A(int a,int c)
          {
              super(c);
              this.a=a;
          }
      
          @Override
          public boolean equals(Object o)
          {
              System.out.println("A.equals");
              if (o instanceof A)
              {
                  A a2 = (A) o;
                  return a2.a==a && a2.c==c;
              }
              else
                  return false;
          }
          
          @Override
          public int hashCode()
          {
              System.out.println("A.hashCode");
              return a;
          }
      }
      
      class B extends C
      {
          int b;
          
          B(int b,int c)
          {
              super(c);
              this.b=b;
          }
      
          @Override
          public boolean equals(Object o)
          {
              System.out.println("B.equals");
              if (o instanceof B)
              {
                  B b2 = (B) o;
                  return b2.b==b && b2.c==c;
              }
              else
                  return false;
          }
          
          @Override
          public int hashCode()
          {
              System.out.println("B.hashCode");
              return b;
          }
      }
      
      class C
      {
          int c;
          
          C(int c)
          {
              this.c=c;
          }
          
          @Override
          public boolean equals(Object o)
          {
              System.out.println("C.equals");
              return ((C) o).c==c;
          }
          
          @Override
          public int hashCode()
          {
              System.out.println("C.hashCode");
              return c;
          }
      }
      
      public class D
      {
          public static void main(String...args)
          {
              HashMap<C,String> map = new HashMap<C,String>();
      
              map.put(new A(1,2), "a");
              System.out.println();
              map.put(new B(1,2), "b");
              System.out.println();
              map.put(new C(1), "c");
              System.out.println();
              System.out.println(map.get(new A(1,2)));
              System.out.println();
              System.out.println(map.get(new B(1,2)));
              System.out.println();
              System.out.println(map.get(new C(1)));
          }
      }
      0