HashMap
Résolu
velocity
Messages postés
251
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
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
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
Au niveau de la syntaxe il faut préciser les types des deux côtés :
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
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
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))); } }