我知道你可以通過一個對象向某個方法傳遞任何東西。我正在嘗試編寫一個斷言函數來檢查兩個地圖是否相等。我不能只使用map1.equals(map2),因爲即使它們具有所有相同的鍵和值,它們也可能以不同的順序排列。所以我想通過第一張地圖上的每個鍵來獲得它的價值,並將其與第二張地圖中該鍵的價值進行比較。我想通常這樣做。所以我寫的(這是不大不小的存根,以證明我的問題,我會做更多的空檢查,等等。):用java實現通用映射
public void assertMapEquals(Map<Object, Object> f, Map<Object, Object> l) {
// This will do null checks, don't worry
for (Entry<Object, Object> ent : f.entrySet()) {
if (f.size() != l.size()) {
throw new AssertionError ("size mismatch");
}
Object k = ent.getKey();
Object e = ent.getValue();
Object a = l.get(k);
if (!e.equals(a)) {
throw new AssertionError("unequal");
}
}
}
然後我試着用兩個String映射到調用它:
public static void main(String[] argv) throws SQLException {
Map<String,String> m1 = new HashMap<>();
Map<String,String> m2 = new HashMap<>();
// Data will get filled in later
assertMapEquals(m1, m2);
// ...
}
但是Eclipse是給我下面的錯誤上的呼叫:
在 的方法assertMapEquals(地圖,地圖)類型MyMain1不適用於參數 (地圖,地圖)
不是字符串對象,所以爲什麼不能這樣工作,我該怎麼辦?這個問題可以應用於這種類型的任何示例,而不僅僅是比較兩張地圖。
我還有一個額外的問題是有沒有更好的方法可以做到這一點,但它並不關心訂單?
爲什麼不使用'assertMapEquals(Map,Map )'? –
tumisma
這就是我改變它,但它是可以想象的,我想打電話給它有時與其他類型的地圖。 – Tony
只有在使用'TreeMap'時才能保證訂購。任何其他的'Map'都不會保留密鑰的排序 –