У меня проблема с получением ArrayList для правильного использования переопределенных равных. проблема в том, что я пытаюсь использовать равенства для проверки только для одного ключевого поля, и с помощью ArrayList.contains () для проверки существования объекта с правильным полем. Вот пример
public class TestClass {
private static class InnerClass{
private final String testKey;
//data and such
InnerClass(String testKey, int dataStuff) {
this.testKey =testKey;
//etc
}
@Override
public boolean equals (Object in) {
System.out.println("reached here");
if(in == null) {
return false;
}else if( in instanceof String) {
String inString = (String) in;
return testKey == null ? false : testKey.equals(inString);
}else {
return false;
}
}
}
public static void main(String[] args) {
ArrayList<InnerClass> objectList = new ArrayList<InnerClass>();
//add some entries
objectList.add(new InnerClass("UNIQUE ID1", 42));
System.out.println( objectList.contains("UNIQUE ID1"));
}
}
Что меня беспокоит, так это то, что я не только получаю ложные данные на выходе, но я также не получаю вывод "достигнуто здесь".
У кого-нибудь есть идеи, почему это переопределение полностью игнорируется? Есть ли какая-то тонкость с переопределениями и внутренними классами, о которых я не знаю?
Edit:
Возникли проблемы с сайтом, поэтому я не могу отметить ответ.
Спасибо за быстрый ответ: да, упущение с моей стороны, что называется String .equals, а не мой пользовательский. Полагаю, сейчас это старомодные чеки