Slt,
tout d'abord je tien a signaler que j'ai bien fait une recherche préalable sur ce sujet et que j'ai trouvé un post tres bien fait sur le sujet par benou http://forum.hardware.fr/hardwaref [...] 3486-1.htm,
mais j'ai quand meme un probleme sur le redefinition de la classe equals(), et j'aurais donc besoin d'un petit coup de main.
Pour vous resumer mon prgm, j'ai la classe Parametre suivante ou je redefinis hashCode() et equals()
Citation :
public class Parameter
{ // ATTRIBUTS
private String mnemo; private String syntax;
private String access;
private String status; private String descr;
private String oid;
private String equipment;
private MibValueSymbol [] enum;
private String community;
public int hashCode(){
return this.enum.length;
}
public boolean equals(Object o){
System.out.println("compare = " + this.mnemo); System.out.println("comparant = " +((Parameter) o).mnemo);
if(o instanceof Parameter){
// Test sur this.enum et ((Parameter) o).enum pour savoir si egalité
return true;
}
return false; } }
|
et une autre classe WriteToExcel ou j'utilise une table de hashage ayant comme clé une instance de Parametre.
J'ai dans cette classe les attributs et la fonction suivante :
Citation :
// ATTRIBUTS
private HSSFWorkbook [] wb ;
private HSSFSheet [] sheet;
private HSSFRow [] row; private HSSFCell [] cell;
private Vector enumSheet;
private Hashtable table;
// CONSTRUCTOR
public WriteToExcel(String [] files) throws IOException{
this.enumSheet = new Vector();
this.openFiles(files);
this.getBackSheets();
this.getBackRows();
this.getBackCells();
this.table = new Hashtable(10); }
public String fillEnumSheet (Parameter p){ String name2 = (String)this.table.get(p);
if(name2 == null){ // Le parametre n'est pas present dans la table
int taille = this.enumSheet.size();
name2 = "Enum " + taille; this.table.put(p, name2); //Ajout du parametre dans la table //CREATE NEW SHEET
// ...
// ADD THE NEW SHEET
// ...
} return name2;
}
|
Le probleme que j'ai c'est que la methode equals() redefinie dans la classe parametre renvoie toujours true.
J'ai donc fait un affichage au debut de cette fonction et je me rends compte qu'en fait elle compare le parametre p de (String)this.table.get(p) a lui meme et non pas aux autres parametres de la table de hashage ayant le meme hashCode().
Donc chaque fois que je teste si le parametre est dans la table il me renvoie true des qu'un parametre de meme hashcode est deja present, a cause de la fonction equals qui renvoie toujours true.
Est-ce que qq'un saurait d'ou vient le pb?