2012-09-17 49 views
2

我有一个扩展了LinkedHashMap的类(EntireFile)。我试着投:java将LinkedHashMap转换为延伸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>> 

请帮我解决错误!

+0

您正在尝试你的LinkedHashMap向下转换到EntireFile。如果转换不起作用,那是因为您的方法返回的对象的运行时类型不是EntireFile。 –

回答

5

问题是仅返回参考不是EntireFile实例的参考。如果functionReturningLinkedHashMap仅返回LinkedHashMap,则不能将其转换为EntireFile,因为它不是之一 - 它将如何获得有关它的任何额外信息?

(您的异常情况来看,你实际上是在谈论GroupMap而非EntireFile,但同样的道理也适用)

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

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

工作!谢谢! – maximsmol

0

而不是铸造,你可以复制数据到你需要的地图类型。

EntireFile old = new EntireFile(functionReturningLinkedHashMap()); 

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