List<? super Number> myNumsContra = new ArrayList<Number>();
myNumsContra.add(2.0F);
myNumsContra.add(2);
myNumsContra.add(2L);
System.out.println(myNumsContra.get(0)); //should throw error
ジェネリックの反則ルールによると、上記のget(0)コールはコンパイルエラーを投げます。しかし、私はこれが起こっているとは思わない。私が逃したものはありますか?私はJava-8を使用していますジェネリックのコントラバナンスは期待どおりに動作しません。
では、あなたがhttps://docs.oracle.com/javase/7/docs/api/java/util/ArrayListを使用しているメソッドのjavadocを参照してください。 html#get(int) –
'get(0)'は正確にエラーを投げるべきですか? –
Listクラスがバインドされているかどうかを示すこの記事(https://dzone.com/articles/covariance-and-contravariance)を読んでいましたか?スーパーTの場合、コンパイラがエラーをスローするので、get(0)を呼び出すことができません。 – jtkSource