2

以下のコードでコンパイル時エラーが発生するのはなぜですか。

    Map<String,? extends Object> inputMap = 
                 new HashMap<String, ? extends Object>();

コンパイル時エラー。

タイプをインスタンス化できませんHashMap<String,? extends Object>

文字列をキーとして、任意のオブジェクトを値として取るマップが必要です

4

2 に答える 2

6

?「任意のオブジェクトを取る」という意味ではありません。これは「たまたま未知の特定のタイプのオブジェクトを取得する」ことを意味し、実際にコンテナーを作成するときには意味がありません。

代わりにこれを試してください:

 Map<String,Object> inputMap = new HashMap<String,Object>();
于 2012-05-10T10:15:36.307 に答える
6

これは、 に含まれる値のタイプを指定HashMapする必要があるためです。基本的に、クラスをインスタンス化するときにワイルドカードを使用することはできません。

ただし、これは正常に機能します。

Map<String, ? extends Object> inputMap = new HashMap<String, Object>();

ただし、すべてがオブジェクトを拡張するため、?拡張する必要があると言うのは一種の冗長です (もちろん、実際のコードObject以外に何か他のものがある可能性があります)。Object

于 2012-05-10T10:15:29.320 に答える