-2

我有两张这样的地图:

Map<Long, MyObject> myMap1 = new HashMap<Long, MyObject>()

Map<Integer, Set<Long>> myMap2 = new HashMap<Long, Set<Long>>()

如何在不传递泛型Object或重载方法的情况下将只有这两种类型的映射的映射传递给方法?

public void method() {
    //method for maps
}
4

3 回答 3

1

如果您想以相同的方法使用它们,您只能使用不同类型的共同点。

为了

Map<Long, MyObject> myMap1 = new HashMap<Long, MyObject>();
Map<Integer, Set<Long>> myMap2 = new HashMap<Integer, Set<Long>>();

他们最大的共同点是:

void method(Map<? extends Number, ? extends Object> map) {
    Number key = ?? (you know it is a Number but that's not helping much)
    Object object = map.get(key);
    object.IDonTKnowWhatTypeYouAre();
}

这可能没用,因为您基本上对可以在方法中使用的类型一无所知。

于 2013-08-09T18:10:49.177 回答
0
public void method1(Map<Long, MyObject> map) {
    //method for map
}

public void method2(Map<Integer, Set<Long>> map) {
    //method for map
}

你可以用method1(myMap1)and来调用它method2(myMap2)

于 2013-08-09T17:59:44.233 回答
-1

Map您可以为没有泛型参数的擦除类型声明方法,或者为 声明方法Map<?, ?>,但会失去泛型参数的类型安全性。因此编译器会给你一些警告。

因此,您通常应该避免这种情况。

于 2013-08-09T17:58:54.533 回答