java - 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;
}
解决方案
不允许将 TreeMap 转换为 HashMap。您应该遵循一般准则,首先检查引用变量是否为特定类型,然后才执行强制转换。
一般来说,我们将层次结构中的超类型转换为子类型,以使用子类型提供的特定方法。
因此,在这种情况下,您可以将 TreeMap 转换为 Map,或将 HashMap 转换为 Map,但从 TreeMap 转换为 HashMap 或反之亦然无效。
推荐阅读
- php - PHP 在覆盖异常后对警告是致命的
- ssis - 找不到脚本任务的二进制代码。请在设计器中打开脚本并确保它构建成功
- php - 如何使用 foreach 循环插入 Mysql 数据
- swift - Swift UICollectionView 导航栏约束
- typescript - 如何用所有相同类型的 n 个键简明地定义打字稿类型
- flutter - 如何在 Flutter 应用中监听和处理 POST 请求
- flutter - 即使我在 initState 中初始化变量,Dart 也会抛出 LateInitializationError
- android - ChipGroup中的芯片如何居中对齐?
- java - 如何使用 Java 删除 AppEngine 版本、服务或应用程序?
- docker - airflow.exceptions.SerializedDagNotFound --> Scheduler down?