以下のコードでコンパイル時エラーが発生するのはなぜですか。
Map<String,? extends Object> inputMap =
new HashMap<String, ? extends Object>();
コンパイル時エラー。
タイプをインスタンス化できません
HashMap<String,? extends Object>
文字列をキーとして、任意のオブジェクトを値として取るマップが必要です
?
「任意のオブジェクトを取る」という意味ではありません。これは「たまたま未知の特定のタイプのオブジェクトを取得する」ことを意味し、実際にコンテナーを作成するときには意味がありません。
代わりにこれを試してください:
Map<String,Object> inputMap = new HashMap<String,Object>();
これは、 に含まれる値のタイプを指定HashMap
する必要があるためです。基本的に、クラスをインスタンス化するときにワイルドカードを使用することはできません。
ただし、これは正常に機能します。
Map<String, ? extends Object> inputMap = new HashMap<String, Object>();
ただし、すべてがオブジェクトを拡張するため、?
拡張する必要があると言うのは一種の冗長です (もちろん、実際のコードObject
以外に何か他のものがある可能性があります)。Object