Does java support class Foo<T super X> ,if no,why ?
Where T is a type parameter and X is a type.
No. The super keyword in the context of Generics could only be used in combination with a wildcard (?) when declaring (consumer) variables or method parameters (consumers) that are of some Generic type.
For example, these are valid:
List<? super Something> list = someListReference;
public void methodThatPopulatesAList(List<? super Something> consumer) {
...
list.add(new Something());
...
}
More info:
you can use generic declaration Foo<? super X> in order to make things like this possible:
List<? super Integer> foo3 = new ArrayList<Object>();
but you can't use it in class declaration
For Class :
class Foo<T extends X>
For Object :
Object<? extends X>