Mam problem, w którym tworzę ArrayList obiektów Foo, nadpisuję metodę równości, i nie mogę uzyskać metody contains, która wywoła metodę equals. Próbowałem overriding equals i hashcode razem, ale nadal nie działa. Jestem pewien, że istnieje logiczne wytłumaczenie, dlaczego tak jest, ale nie mogę tego teraz zrozumieć na moim własnym LOL. Chcę tylko sposób sprawdzenia, czy lista zawiera określony identyfikator..Contains() metoda nie wywoływanie Overridden równa się metoda
Oto niektóre kodu:
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;
}
}
WYJŚCIE: false false fałszywe
Dodałem prosty kod skrótu, nadal nie działa ... –
@ReidMac: Myliłem się, chodzi o to, że 'equals()' nie jest symetryczny, spójrz na moją edycję. 'hashCode()' nie ma nic do zrobienia w tym przypadku, ale powinieneś postępować zgodnie z tą zasadą –
Dziwne, że musimy użyć tej nowej konwencji Foo ("ID1"); 'do użycia metody custom equals. Jakiś powód tego? – Dish