Does java support class Foo ,if no,why?

2020-04-10 02:45发布

问题:

Does java support class Foo<T super X> ,if no,why ?

Where T is a type parameter and X is a type.

回答1:

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:

  • What is PECS?
  • Wildcards in Java


回答2:

For Class :

class Foo<T extends X>

For Object :

Object<? extends X>


回答3:

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



标签: java generics