将List转换为MultiKeyMap时,为什么不会出现编译错误?

时间:2013-02-21 12:48:39

标签: java casting

我刚刚遇到一段代码,将a List强制转换为a MultiKeyMap来调用一个以MultiKeyMap为参数的方法:

someMethod ((MultiKeyMap) myList);

myListList

当然,它会在运行时抛出ClassCastException。为什么在尝试将Collection投射到Map时,它是否显示编译错误或至少出现“类型安全:未选中投射”的警告?两种类型没有任何共同之处。

1 个答案:

答案 0 :(得分:7)

这不是编译错误,因为可能有一个List实现也恰好是MultiKeyMap

public MyHybrid extends MultiKeyMap implements List {
  // implement stuff
}

我不是说这是一个好主意,但类型系统并不能阻止它。因此,编译器允许转换。

它不是未经检查的强制转换的原因是因为目标类型没有泛型类型参数(即没有MultiKeyMap<K,V>)。