我刚刚遇到了一段代码,该代码将a List
转换为a MultiKeyMap
来调用以MultiKeyMap
作为参数的方法:
someMethod ((MultiKeyMap) myList);
其中
myList
是List
。当然,它会在运行时引发
ClassCastException
。为什么在尝试将Collection
强制转换为Map
时,它为何不显示编译错误或至少显示“类型安全:未检查的强制转换”警告?两种类型没有共同点。 最佳答案
这不是编译错误,因为可能有一个List
实现也恰好是一个MultiKeyMap
:
public MyHybrid extends MultiKeyMap implements List {
// implement stuff
}
我并不是说这是一个好主意,但是类型系统并不能阻止它。因此,编译器允许进行强制类型转换。
它不是未经检查的强制转换的原因是因为目标类型没有泛型类型参数(即没有
MultiKeyMap<K,V>
)。