java将LinkedHashMap转换为扩展LinkedHashMap的类

时间:2012-09-17 14:42:56

标签: java casting hashmap linkedhashmap

我有一个扩展LinkedHashMap的类(EntireFile)。我试着施展:

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>>

请帮我解决错误!

2 个答案:

答案 0 :(得分:5)

问题是返回的引用只是不是EntireFile实例的引用。如果functionReturningLinkedHashMap只返回LinkedHashMap,则无法将其转换为EntireFile,因为不是一个 - 它将如何获得任何额外信息关于它?

(根据您的例外判断,您实际上是在讨论GroupMap而非EntireFile,但同样适用。{/ p>

这里LinkedHashMap没有什么特别之处 - 在Java中总是为真:

Object foo = new Object();
String bar = (String) foo; // Bang! Exception

答案 1 :(得分:0)

您可以将数据复制到所需的地图类型,而不是投射。

EntireFile old = new EntireFile(functionReturningLinkedHashMap());

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