Причина, по которой Map<String, Map<String, String>>
не может быть преобразована в Map<String, Object>
, заключается в том, что последний может делать то, что первый не может.Рассмотрим
Map<String, Map<String, String>> myStringMap = new HashMap<>();
Map<String, Object> myObjectMap = myStringMap; // Not allowed, but suppose it were
myObjectMap.put("key", new Integer(10));
// Now myStringMap contains an integer,
// which is decidedly *not* a Map<String, String>
Если бы это было разрешено, то вызов .put
не выполнялся бы во время выполнения, поэтому такая ситуация запрещена системой типов.Если GeometryWithTags
является классом, которым вы управляете, и он на самом деле никогда ничего не добавляет на карту, вы должны использовать шаблон PECS
GeometryWithTags(Map<String, ? extends Object> map) { ... }
Теперь у нас есть карта, которая может иметь любое значениевведите, но мы гарантируем, что мы ничего не сможем добавить (поскольку ?
может быть несовместимо с добавленным значением).
Если GeometryWithTags
должна быть возможность изменить карту, или еслиу вас нет контроля над классом, тогда вам нужно изначально создать Map<String, Object>
.