Ваш код будет работать, если вы измените подпись Карты в методе вызова:
Не требуется никаких изменений для make
public static <A, B> Map<A, B> make(final A key1, final B value1,
final A key2, final B value2) {
Map<A, B> map = new HashMap<A, B>();
map.put(key1, value1);
map.put(key2, value2);
return map;
}
*Абонент 1010 *
Вы должны изменить Map<String, Object>
на Map<String, ? extends Object>
:
public static void main(String[] args) {
@SuppressWarnings("unused")
Map<String, ? extends Object> m = make("a", new Integer(1), "2", "efg");
}
EDIT1: OpenJDK 1.6 + Eclipse Indigo compiler
EDIT2:При построении таких общих карт вы должны признать, что вам необходимо уменьшить значение при получении значений.
EDIT3: Есть ли способ исправить это?Конечно, определение функции с помощью сигнатуры make (Object ... keysAndValues) будет работать, но я бы потерял безопасность типов времени компиляции.
Вы всегда потеряете безопасность времени компиляции в определенный момент.По крайней мере, когда дело доходит до поиска.