在一個實現了一個擴展Iterable接口的java類中,如何實現equals?在實現可擴展Iterable的接口的java類中等於實現?
接口
public interface MyInterface extends Iterable<String> {
...
}
具體類
public class MyClass implements MyInterface {
private Set<String> myStrings = new HashSet<String>();
@Override
public Iterator<String> iterator() {
return myStrings.iterator();
}
@Override
public boolean equals(Object otherObject) {
我應該如何檢查這兩個實例和其它實例包含了一組字符串?簡單的方法將只檢查等於這個實現而不是界面,但這聽起來像是作弊。
if (otherObject instanceof MyClass) { ... } // easy, just myStrings.equals(...)
但
if (otherObject instanceof MyInterface) { ... } // compare two iterators?
還是我失去了一些東西?我也必須實現hashCode,如果兩個對象相同,不應該他們的哈希碼相同,因此等於只能檢查MyClass來滿足這個合同?!
}
}
作爲集合是無序的,有這種方法的一個無序版本實驗? –
不在Guava圖書館(我知道)。我有自己的Guava附加組件,它實現了containsAll,它遍歷一個迭代器並在另一個迭代器上調用Iterables.contains。使用上面描述的Set機制可能會更高效。 –
我還創建了一個containsAllAndOnly,它使用Iterables.size檢查每個Iterable的大小是否相同,然後調用containsAll。 –