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