3

次のグローバル変数があります。

private Map<String,List<String>> network;

コンストラクターで次のようにインスタンス化します。

network = new Hashtable<String,ArrayList<String>>();

上記のインスタンス化はコンパイルされません。どうやら、マップをパラメーター化するとき、より一般的なリストを使用するのではなく、文字列からArrayListへのマッピングであることを宣言する必要がありますか?なぜ私がこれをしなければならないのかについての洞察はありますか?

4

3 に答える 3

5

申し訳ありませんが、内部クラスをサブクラス化することはできません。

network = new Hashtable<String,List<String>>();

ただし、メンバーを追加すると、値を配列リストとして作成できます。

network.put("Key", new ArrayList<String>());
于 2011-01-29T21:34:29.637 に答える
3

逆です。新しいHashTableを作成するときに、ArrayListsを値として使用することを指定する必要はありません。代わりに、あなたは言うべきです

new Hashtable<String, List<String>>();

また、値として使用するリスト実装の選択は自由です。

于 2011-01-29T21:36:26.053 に答える
1

変数を次のようにパラメーター化することもできます

プライベート Map<String, ? List<String>> ネットワークを拡張します。

詳細については、たとえばhttp://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29#Javaを参照してください。

于 2011-01-29T21:37:44.163 に答える