1

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

someMethod ((MultiKeyMap) myList);

myList一个在哪里List

当然,它会ClassCastException在运行时抛出一个。为什么它不显示编译错误或至少在尝试将 aCollection转换为 a时显示警告“类型安全:未经检查的转换” Map?这两种类型没有任何共同之处。

4

1 回答 1

8

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

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

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

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

于 2013-02-21T12:54:17.947 回答