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

someMethod ((MultiKeyMap) myList);


其中myListList

当然,它会在运行时引发ClassCastException。为什么在尝试将Collection强制转换为Map时,它为何不显示编译错误或至少显示“类型安全:未检查的强制转换”警告?两种类型没有共同点。

最佳答案

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

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


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

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

07-24 19:38