2011-07-25 136 views
3

我有一個一流的球員,其中一些字段:我可以只使用關鍵字段來檢查等於嗎?我可以通過子類使用等於嗎?

String name; 
Point position; 
Action action; 

「名稱」字段是那種關鍵的,不能有2名玩家使用相同的名稱。所以在我看來,他們是平等的,如果'名稱'(可能被忽略)是相同的。那麼,我只使用String.equalsIgnoreCase(String)還是檢查其他字段?

1)我是否應該比球員的equals方法名稱字段嗎?

2)我應該拋出一個錯誤的equals方法,如果其他字段是不一樣的?

3)又是明智檢查一個字段只針對子類,因爲即使在子類相同的名稱,代表同樣的球員,或者我應該選擇這種比較的另一種方法?例如:

class MovingPlayer extends Player{ 
    Point destination; 

所以'name'字段仍然是關鍵字(類似於子類間鍵)。

由於提前,Tjen

回答

2
  1. 你應該問自己一個問題 - 有可能是兩個對象具有相同的名稱屬性和兩個不同的位置特性在應用中存在嗎?如果這是真的,那麼你應該實現equals方法來使用所有相關的字段。

  2. 你不equals方法中拋出一個錯誤。你返回真或假。

  3. 你的子類可以重寫equals方法。在那個重寫的方法中,你可以檢查超級平等,只有當它們相等時,你纔會繼續進行額外的檢查。

+0

1)他們可以不存在,或者不應該進行比較(如果被複制畫,而其他被另一個線程編輯,但該副本戰平後刪除了它可以存在),但如果是這樣的話這個是我的代碼中的錯誤,因此問題2. –

+0

3)這個想法是,子類可以包含一個像點目標的播放器的額外信息;或者其他的東西。但是又是相同的「玩家」(不是真正的球員,但player_sub) –

+0

@NelttjeN - equals方法不能拋出異常。你不被允許。它重寫Object equals,因此您的方法簽名必須匹配。 至於你的第二點,如果是這樣的話,那麼你不必重寫子類中的equals方法。 – Kal

相關問題