首页 > 解决方案 > HashMap 不能强制转换

问题描述

我从以下来源收到以下错误。有人可以帮忙吗?

java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.TreeMap

我认为问题在于:

TreeMap functionResources = (TreeMap) ((Map) 
            AbstractParameterManager.getResource(resourceId)).get(function);

public abstract class AbstractParameterManager implements ParameterManager {
    protected static final Map resourceLocations = 
        ResourceLocator.locateResources();
    protected static final Map resources = new TreeMap();
    protected final Map overrides = new TreeMap();


    protected static Object getResource(String resourceId) {
        Map resourceMap = (Map) resources.get(resourceId);
        if (resourceMap == null) {
            resourceMap = new TreeMap();
            resources.put(resourceId, resourceMap);
        }
        return resourceMap;
    }

    protected static Map getResource(String resourceId, String function) {
        TreeMap functionResources = (TreeMap) ((Map) 
                AbstractParameterManager.getResource(resourceId)).get(function);
        if (functionResources == null) {
            functionResources = new TreeMap();
            ((Map) 
                      AbstractParameterManager.getResource(resourceId)).put(function, 
                      functionResources);
        }
        return functionResources;
    }

标签: java

解决方案


不允许将 TreeMap 转换为 HashMap。您应该遵循一般准则,首先检查引用变量是否为特定类型,然后才执行强制转换。

一般来说,我们将层次结构中的超类型转换为子类型,以使用子类型提供的特定方法。

因此,在这种情况下,您可以将 TreeMap 转换为 Map,或将 HashMap 转换为 Map,但从 TreeMap 转换为 HashMap 或反之亦然无效。


推荐阅读