このコード
static void writeTo(List<? super Apple> apples) {
apples.add(new Apple());
apples.add(new Jonathan());
}
このコードの作成者は、次のように述べています。
引数 apples は、Apple の基本型である型の List です。したがって、Apple または Apple のサブタイプを追加しても安全であることがわかります。下限はAppleなので、
Jonathan は Apple のサブクラスです。
しかし、これを試したとき
List<Jonathan> loj = new ArrayList<Jonathan>();
listSuper(loj);
それは私にこのエラーを与えました
The method listSuper(List<? super Apple>) in the type Basket<T> is not applicable for the arguments (List<Jonathan>)
listSuper
こんなところに
static void listSuper (List<? super Apple> cont) {}
2つの違いは何ですか?
また、私が投稿した最初のコードで私を混乱させたのは、私が考えたということですか? スーパー T は、T の任意の基本型を意味します。しかし、見た目から、彼は T のサブタイプを追加しました。私は混乱しています。