(単純化するために)次のような問題がありました:
public void method(List<List<?>> list){...}
次のコマンドで呼び出すと、コンパイル エラーが発生しました。
method(new ArrayList<List<String>>()); // This line gives the error
同様のスレッドを読んだ後、メソッドのシグネチャを次のように書き直せばうまくいくことがわかりました。
public void method(List<? extends List<?>> list){...}
さて、私の質問は、なぜ次のように機能するのですか?
public <T> void method(List<List<T>> list){...}