У меня возникла проблема с тем, чтобы ArrayList правильно использовал значение overriden. проблема в том, что я пытаюсь использовать равные, чтобы тестировать только одно ключевое поле и использовать 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"));
}
}
Что меня беспокоит, так это то, что я не только ошибаюсь на выходе, но и не получаю выход "достигнутый здесь".
Есть ли у кого-нибудь идеи, почему это переопределение полностью игнорируется? Есть ли какая-то тонкость с переопределениями и внутренними классами, о которых я не знаю?
Изменить: Возникли проблемы с сайтом, поэтому я не могу отметить ответ. Спасибо за быстрый ответ: да, с моей стороны, надзор, что это String.equals thta называется, а не мой пользовательский. Я предполагаю, что это были старомодные проверки на данный момент