В Map, в качестве ключа, я хочу искользовать собственный объект, ну положим Item, с переопределёнными методами hashCode и equals. Но когда я хочу получить значение, ранее положенное в Map я получаю null, в качестве примера привожу код. Вопрос собственно в том, как можно реализовать код класса Item, чтобы в итоге Map мне вернул значение по указанному ключу?
public class Item {
private Integer item;
public Item(Integer item) { this.item = item; }
public void setItem(Integer item) { this.item = item; }
public Integer getItem() { return this.item; }
public int hashCode() { return item * 31; }
public boolean equals(Item item) { return this.hashCode() == item.hashCode(); }
public String toString() { return item.toString(); }
}
public class Test {
public static void main(String ... argv) {
Map<Item, String> map = new HashMap<Item, String>();
map.put(new Item(2), "test");
System.out.println(map.get(new Item(2))); // Возвращает null
}
}
Ваша проблема в том, что вы не переопределили метод equals. В классе Object метод имеет сигнатуру
public boolean equals(Object obj)
А вы создали свой метод equals со своей сигнатурой. Если вы пометите свой метод equals аннотацией @Override компилятор выдаст ошибку по этому поводу. Следовательно измените метод equals в классе Item на
@Override
public boolean equals(Object obj)
и у вас всё заработает )
@Override
public int hashCode() { return item * 31; }
и так далее
Виртуальный выделенный сервер (VDS) становится отличным выбором
При чти чтение базы даных MS Access получаю ошибку
Имеется некое оконное приложение написанное с помощью QtЕсть ли возможность встроить его в eclipse? Я знаю, что плагины для него можно писать...