В качестве дополнительного вопроса к По каким причинам Map.get (ключ объекта) не является (полностью) универсальным , почему интерфейс JDK 6 и 7 Map
не определяет "get "метод как универсальный метод, так что компилятор может использовать вывод типа для возвращаемого значения?
Например, если« get »были определены как:
public <T extends V> T get(Object key)
, тогда вызывающая сторона можетwrite:
Map<String,Object> m = new HashMap<>();
m.put("key", new Foo());
...
Foo f = m.get("key"); // type inference, implicit cast
В приведенном выше фрагменте я мог бы определить m как Map<String,Foo>
, но учтите, что определение m как Map<String,Object>
вместо Map<String,Foo>
полезно во многих ситуациях, например, когда mможет содержать значения любого типа, но тип значения все еще может быть выведен на основе ключа, например, простой кэш или объект контекста.