将LinkedHashMap转换为继承自LinkedHashMap类的Java类

3

我有一个类(EntireFile),它继承了LinkedHashMap。我尝试进行强制转换:

EntireFile old = (EntireFile) functionReturningLinkedHashMap();

它抛出异常,错误信息为:"java.util.LinkedHashMap无法转换为com.gmail.maximsmol.YAML.GroupMap"。

public class EntireFile extends LinkedHashMap<String, GroupMap>

public class GroupMap extends LinkedHashMap<String, CategoryMap>

public class CategoryMap extends LinkedHashMap<String, LinkedHashMap<String, Integer>>

请帮我解决这个错误!


你正在尝试将你的LinkedHashMap向下转型为EntireFile。如果转型失败,那是因为你的方法返回的对象的运行时类型不是EntireFile。 - Alexandre Dupriez
2个回答

5
问题在于返回的引用根本不是指向EntireFile实例的引用。如果functionReturningLinkedHashMap只返回一个LinkedHashMap,它就不能被强制转换为EntireFile,因为它本身不是一个EntireFile - 它怎么可能获取任何有关它的额外信息呢?(根据您的异常,您实际上正在谈论GroupMap而不是EntireFile,但是相同的情况也适用。)在这里LinkedHashMap没有什么特别之处 - 在Java中总是如此。
Object foo = new Object();
String bar = (String) foo; // Bang! Exception

0

你可以将数据复制到你需要的地图类型,而不是进行强制转换。

EntireFile old = new EntireFile(functionReturningLinkedHashMap());

或者

EntireFile old = new EntireFile();
old.putAll(functionReturningLinkedHashMap());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接