1

引数をとるメソッドを呼び出すためにaをにキャストするListコードに遭遇しました。MultiKeyMapMultiKeyMap

someMethod ((MultiKeyMap) myList);

はどこmyListにありますかList

もちろん、ClassCastException実行時にをスローします。Collectionにキャストしようとしたときに、コンパイルエラーまたは少なくとも「タイプセーフティ:チェックされていないキャスト」という警告が表示されないのはなぜMapですか?どちらのタイプにも共通点はありません。

4

1 に答える 1

8

ListたまたまMultiKeyMap:である実装があるかもしれないので、それはコンパイルエラーではありません。

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

それが良い考えだと言っているわけではありませんが、型システムはそれを妨げません。したがって、キャストはコンパイラーによって許可されます。

チェックされていないキャストではない理由は、ターゲット型にジェネリック型パラメーターがない(つまり、がないMultiKeyMap<K,V>)ためです。

于 2013-02-21T12:54:17.947 に答える