2016-03-03 359 views
-2

我試圖用Java開發一個TS3博特這個API:https://github.com/TheHolyWaffle/TeamSpeak-3-Java-APIlist.contains不起作用

我有一個客戶擁有的所有服務器組列表:

List<ServerGroup> playerGroups = TS3Bot.api.getServerGroupsByClientId(player.clientdbID); 

現在我檢查列表是否包含組:

if(!playerGroups.contains(TS3Bot.botGroups.get(1))){...} 

而結果是錯誤的。我100%確定這個List包含ServerGroup。

已經用Sysouts檢查過它。

這裏是鏈接到的ServerGroup類:https://github.com/TheHolyWaffle/TeamSpeak-3-Java-API/blob/master/src/main/java/com/github/theholywaffle/teamspeak3/api/wrapper/ServerGroup.java

而且這僅僅是的ServerGroup Object.toString()。

{iconid=0, savedb=1, sortid=0, name=Test 2, n_member_removep=100, sgid=98, type=1, n_member_addp=100, namemode=0, n_modifyp=100} 
+8

您是否在ServerGroup中使用了equals和hashcode? –

+0

'list.contains()'確實有效。請回復@ Jean-FrançoisSavard的評論。必須做一些事情來禁用'contains()'方法的正常工作。 –

+0

您需要顯示ServerGroup的相關部分。 – Raedwald

回答

2

不要忘記尊重Object#equals(Object o)合同

指示某個其他對象是否「等於」這一項。等號 方法實現對非空對象 引用的等價關係:

自反性:對於任何非空引用值x, x.equals(X)應返回true。

它是對稱的:對於任何非空 引用值x和y,如果y.equals(x)返回true,則x.equals(y)應該返回true並且只有 。

傳遞性:對於任何非空 參考值x,y和z,如果x.equals(y)的返回true並且 y.equals(z)的返回true,那麼x.equals(z)的應該返回true。

它是一致的:對於任何非空引用值x和y,x.equals的多個 調用(y)始終返回true或始終 返回false,沒有設置中使用的信息等於在 的對象的比較是改性。對於任何非空參考值x, x.equals(null)應該返回false。類Object 的equals方法實現了對象 上最可能的等價關係;也就是說,對於任何非空參考值x和y,當且僅當x和y引用同一對象(x == y的值爲true)時,此 方法返回true。

注意,這是通常需要覆蓋每當這個方法被覆蓋,從而 維持hashCode方法,其中指出該 等於對象必須具有相等的散列碼的一般合同hashCode方法。