Ho un problema in cui creo un oggetto ArrayList di Foo, sovrascrivo il metodo equals e non riesco a ottenere il metodo contains per chiamare il metodo equals. Ho provato a eseguire l'override di equals e hashcode, ma non funziona ancora. Sono sicuro che c'è una spiegazione logica del perché questo è, ma non riesco a capirlo al momento sul mio lol. Voglio solo un modo per vedere se la lista contiene l'id specificato..Contains() metodo che non chiama Override uguale al metodo
Ecco po 'di codice:
import java.util.ArrayList;
import java.util.List;
public class Foo {
private String id;
public static void main(String... args){
Foo a = new Foo("ID1");
Foo b = new Foo("ID2");
Foo c = new Foo("ID3");
List<Foo> fooList = new ArrayList<Foo>();
fooList.add(a);
fooList.add(b);
fooList.add(c);
System.out.println(fooList.contains("ID1"));
System.out.println(fooList.contains("ID2"));
System.out.println(fooList.contains("ID5"));
}
public Foo(String id){
this.id = id;
}
@Override
public boolean equals(Object o){
if(o instanceof String){
String toCompare = (String) o;
return id.equals(toCompare);
}
return false;
}
@Override
public int hashCode(){
return 1;
}
}
USCITA: falso falso falso
ho aggiunto un semplice codice hash, ancora non funziona ... –
@ReidMac: mi sbagliavo, si tratta di 'equals()' non essendo simmetrico, dai un'occhiata alla mia modifica. 'hashCode()' non ha nulla da fare in questo caso, ma dovresti comunque seguire questo principio –
Strano che abbiamo bisogno di usare questa 'nuova Foo (" ID1 ");' convenzione per usare il metodo degli uguali personalizzati. Qualche ragione dietro a questo? – Dish