わかりませんgeneric wildcard bounderies ussage。
processMap
が次の例のコンパイルエラーで失敗するのに対して、なぜがうまく機能するのか説明してください。どのように私はトリック複合型ワイルドカードバウンス
public void processMap(Map<String, List<? extends Object>> map)
public <T extends Object> void processMap(Map<String, List<T>> map)
を作っparametherメソッドにメソッドの引数の型からジェネリック型定義を考え動かしながら、それはMap<String, List<String>>
とMap<String, List<Object>>
public void processList(List<? extends Object> list) {
}
public void processMap(Map<String, List<? extends Object>> map) {
}
public void f() {
List<String> list = new ArrayList<>();
Map<String, List<String>> map = new HashMap<>();
processList(list); // OK
processMap(map); // ERROR
}
の両方で動作するようにprocessMap
の署名を変更する必要があります今は両者の違いを知りたい。 another threadに移動しました。
私は正解かどうかわかりませんが、Javaコンパイラが解決できないか、問題で定義されたマップコレクションのキーとして使用されているコレクションの種類を変換できないようです。私は 'public static void processMap(Map <?extends Object、List > map)'のように関数シグネチャを変更するとうまく動作するので、これを言っています。 ''と '<?extends Object>の間には大きな違いがあるようです。このような宣言で使用されるときには、Object> 'を拡張します。そのマルチレベルワイルドカードのコンセプト。 –
qwerty