2013-04-15 50 views
0

我試圖重寫頂點變量等於。目前,當調用vertexList.contains(「test」)時,頂點類中聲明的equals()不會運行。有什麼我失蹤?的Java重寫equals()的自定義類

完整的代碼可以在我的git hub,如果你認爲它是別的東西,有一個快速的測試文件UI.java一起被發現。否則我就沒有想法。
謝謝,

class Data implements Graph 
{ 
    java.util.LinkedList<vertex> vertexList = new java.util.LinkedList<vertex>(); 

    class vertex 
    { 
     String ID; 
     java.util.LinkedList<String> links = new java.util.LinkedList<String>(); 
     boolean tracker = false; 

     public vertex(String it) 
     { 
      ID = it; 
     } 

     @Override 
     public boolean equals(Object obj) 
     { 
      if (obj.equals(null)) 
       return false; 
      System.err.println("OBJECT CHECK"); 
      String str = (String) obj; 
      // return true; //To test if it's being accessed 
      return str.equals(ID); 
     } 

     public String toString() 
     { 
      return ID; 
     } 
    } 
} 
+0

你忘了擴展頂點類?我不確定你想在這裏完成什麼?如果不擴展/實現父類,則不能重寫方法。 – blearn

+0

也許,頂點需要擴展對象嗎? 經過測試,Java包含它。 – Monoxide

+0

這已經是延伸對象 –

回答

1

執行vertexList.contains("test")將執行的Stringequals()方法對你的對象。您正在尋找linkedList.contains(new Vertex("a"));將執行equals()方法針對的目標對象。這裏就是o被搜索的對象 LinkedList的IMPL。

 for (Entry e = header.next; e != header; e = e.next) { 
      if (o.equals(e.element)) 
       return index; 
      index++; 
     } 

您也應該檢查一個Vertex而不是在equals()方法String。這就是它的意思。你應該試着檢查一個Vertex是否等於另一個。

+0

天才!它使用String.equals()。我將其更改爲vertexList.contains(new vertex(「test」)),並更改了equals()方法以比較兩個頂點的ID。 – Monoxide

0

什麼是你想在這行來完成?

String str = (String) obj; 

如果我理解正確的代碼的目的,我想你的equals方法應該看起來更像是這樣的:

@Override 
public boolean equals(Object obj){ 
if(obj != null && obj.getClass().equals(this.getClass()){ 
    return ((vertex)obj).toString().equals(this.ID) 
    } else { 
    return false; 
    } 
} 
相關問題