2013-12-07 33 views
0

我打算重寫我的對班內boolean equals(Object otherObject)方法,它使用一個私有內部類私有的實例變量如下:的Java等於重寫

class Pair 
{ 
    class Node 
    { 
     private int x, y; 
    } 

    public boolean equasl(Object otherObject) 
    { 
     if(otherObject == null) 
     { 
      return false; 
     } 
     else if(getClass() != otherObject.getClass()) 
     { 
      return false; 
     } 
     else 
     { 
      Pair other = (Pair)otherObject; 

      return (x.equals(otherObject.x) && y.equals(otherObject.y)); 
     } 
    } 
} 

據我如何比較兩個Pair對象是我不太清楚其中每個對象由雙鏈表組成(爲了清楚起見未示出)。我是否比較每個以頭節點開頭的對象並遍歷列表來驗證列表中的每個節點是否相等?

+0

是什麼讓你認爲這對對象有一個LinkedList? – hrv

+0

你的例子中的鏈表在哪裏?我對理解這個問題有困難。 –

+0

由於Node是一個雙向鏈表,我寫了但省略了細節以簡化演示 – Mushy

回答

1

Pair類將使用equals的值與另一對進行比較,而不是雙向鏈表。它將對象作爲Pair對象,然後檢查null和classtype,最後比較另一個pair對象內的Node類的x和y值。

+0

您的評論是正確的。通過向Node類添加重寫的equals方法,直接比較x和y,我偶然發現瞭解決方案。在Pair中被覆蓋的等於直接比較Pair對象,並且在程序運行時導致它們的x和y的直接比較。 – Mushy

+0

我犯了一個錯誤,x和y變量可以直接在類內部的任何地方訪問,如果它在類的外部,它只有一個錯誤(無關它是什麼實例變量) – hrv

-1

我們假設你有一個實例變量Node n,它是內部類的一個實例。我建議你轉型equals方法一點點:

public boolean equals(Object other) { 
if (other == null) 
    return false; 
if (! other instanceof Pair) 
    return false; 

... 
} 

除此之外,您需要將節點實例結構比較每一類裏面。由於這些是節點上的私有變量,因此您將無法訪問other。定義get方法然後比較整數可能會有所幫助。

這是一般的好向導,以壓倒一切等於

http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC0QFjAA&url=http%3A%2F%2Fwww.seas.upenn.edu%2F~cis120%2F13fa%2Flectures%2Flec32.pdf&ei=TI6jUvLTBeeysQSZxoGQCA&usg=AFQjCNFWIq0POyO5CGD7jCTbmKxlYyU5iQ&bvm=bv.57752919,d.cWc

+0

在equals中使用'instanceof'很糟糕實踐。 –

+0

我聽說在equals中的instanceof很糟糕,但我從來沒有找到任何有關這方面的好文章。你能給我們一個鏈接嗎?謝謝。 –

+1

它很簡單......定義中的'equals'應該形成*平等關係*。使用'instanceof'你不能保證它是* symetrical *。我會盡力尋找一些關於它的正式文章。 –