Duplicate :
|
import java.util.List; class Foo {} class Bar extends Foo {} interface FooList<T extends Foo> extends List<T> {} class Test { <T extends FooList<? super Bar>> void m(T t) { Foo f = t.get(0); } } The program below doesn't compile: $ javac Test.java Test.java:9: incompatible types found : java.lang.Object required: Foo Foo f = t.get(0); ^ 1 error