先日、ジェネリックスと共変性/反変性に関して少し混乱しました。C#が共変/反変型パラメーターを指定していることは知っていますが、Javaには本当に同様の概念がありますか?
私はあなたが宣言できることを理解しています:
List<? extends String> l = ...
List<? super String> l2 =...
これで、lはリストを取得できMyString
、メソッドの追加は許可されません。l2はList<Object>
文字列を取得して追加できますが、ここで説明するように、要素を取得できません。Javaの共変性と反変性。ただし、これは、サブタイプ/スーパータイプを受け入れる型パラメーターを使用してリストを宣言するだけであり、次のような「適切な」共分散を実行しません。
Iterable<Animal> a = new Iterable<Dog>();
私は混乱していますか、それともJavaは単に適切な共分散定義をサポートしていませんか?ありがとう。