我有两张这样的地图:
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
}
如果您想以相同的方法使用它们,您只能使用不同类型的共同点。
为了
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();
}
这可能没用,因为您基本上对可以在方法中使用的类型一无所知。
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)
。
Map
您可以为没有泛型参数的擦除类型声明方法,或者为 声明方法Map<?, ?>
,但会失去泛型参数的类型安全性。因此编译器会给你一些警告。
因此,您通常应该避免这种情况。