java将Map <string,string =“”>转换为Object

时间:2018-10-16 17:18:57

标签: java object

有一个采用Object类型作为参数的函数,我想通过传递Map<String, String>变量来使用此函数。不幸的是对此有所抱怨。是否可以将Map<String, String>强制转换为Object?我认为任何类型的类都可以自动转换为Object,因为Object是一切的超类。

这是代码:

private GeometryWithTags getRouteGeometryWithTags(Route route)
{
    Map<String, Map<String, String>> edgesTags = new HashMap<>();
        Iterator<Edge> edgeIterator = route.iterator();
        while (edgeIterator.hasNext())
        {
            Edge edge = edgeIterator.next();
            edgesTags.put(new Long(edge.getIdentifier()).toString(), edge.getTags());
        }
        return new GeometryWithTags(route.asPolyLine(), edgesTags);
    }
  

错误:类型不兼容:地图>无法转换为地图               返回新的GeometryWithTags(route.asPolyLine(),edgesTags);

1 个答案:

答案 0 :(得分:0)

无法将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 pattern

GeometryWithTags(Map<String, ? extends Object> map) { ... }

现在我们有了一个可以具有任何值类型的映射,但是我们保证不能添加任何内容(因为?可能与所添加的值不兼容)。

如果GeometryWithTags需要能够修改地图,或者您无法控制该类,那么您实际上需要先创建一个Map<String, Object>