我遇到了使ArrayList正確使用重寫equals的問題。問題是我試圖使用equals來僅測試單個鍵字段,並使用ArrayList.contains()來測試是否存在具有正確字段的對象。下面是一個例子ArrayList未使用重寫的等於
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被稱爲,而不是我自定義的一個。我猜這是現在的老式檢查
謝謝。關於新的InnerClass()的建議也很有幫助。 :) – Sufian
在我看來indexOf的實施應該是相反的方式:elementData [i] .equals(o)... – marcolopes