2

我有一个扩展 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>>

请帮我解决错误!

4

2 回答 2

5

问题是返回的引用根本不是EntireFile. 如果functionReturningLinkedHashMap只返回 a LinkedHashMap,则不能将其强制转换为 a EntireFile,因为它不是一个 - 它如何获得有关它的任何额外信息?

(从您的例外情况来看,您实际上是在谈论GroupMap而不是EntireFile,但同样适用。)

这里没有什么特别之处LinkedHashMap——在 Java中总是如此:

Object foo = new Object();
String bar = (String) foo; // Bang! Exception
于 2012-09-17T14:45:34.300 回答
0

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

EntireFile old = new EntireFile(functionReturningLinkedHashMap());

或者

EntireFile old = new EntireFile();
old.putAll(functionReturningLinkedHashMap());
于 2012-09-17T14:55:45.280 回答