我从以下来源收到以下错误。有人可以帮忙吗?
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;
}
答案 0 :(得分:0)
不允许将TreeMap强制转换为HashMap。 您应该遵循一般准则,在该准则中首先检查引用变量是否具有特定类型,然后才执行强制转换。
一般来说,我们从层次结构中的超类型转换为子类型,以使用子类型提供的特定方法。
因此,在这种情况下,您可以将TreeMap转换为Map,或将HashMap转换为Map,但从TreeMap转换为HashMap或反之亦然无效。
答案 1 :(得分:0)
您可以在实例化TreeMap时将映射作为参数传递,而不是尝试将Map作为TreeMap进行类型转换。
e.g:
public static void main(String[] args) {
Map<String, String> hashMap = new HashMap<>();
hashMap.put("a", "a");
hashMap.put("c", "c");
hashMap.put("b", "b");
Map<String, String> treeMap = new TreeMap<>(hashMap);
treeMap.forEach((k, v) -> {
System.out.println(k + " | " + v);
});
}
输出:
a = a
b = b
c = c
在您的情况下,您必须替换以下行:
TreeMap functionResources = (TreeMap)((Map)AbstractParameterManager.getResource(resourceId)).get(function);
通过
Map functionResources = new TreeMap((Map)AbstractParameterManager.getResource(resourceId)).get(function);
既然已经回答了问题,那么您的代码还会遇到一些问题。您的方法getResource
始终返回一张地图,即使它没有,当您将AbstractParameterManager.getResource(resourceId)
作为地图进行类型转换时,您还会遇到其他错误。我强烈建议您将getResource
的返回类型更改为Map。
答案 2 :(得分:0)
public static void main(String [] args){
Map<String, String> hashMap = new HashMap<String, String>();
hashMap.put("a", "a");
hashMap.put("c", "c");
hashMap.put("b", "b");
Map<String, String> treeMap = new TreeMap<>(hashMap);
treeMap.forEach((k, v) -> {
System.out.println(k + " | " + v);
});
}
@TwiN初始化地图时出错