Разница между ArrayList<? super A>
и ArrayList<A>
заключается в том, что первому можно присвоить объект ArrayList<T>
, где T
является суперклассом A
или A
.
Inконкретные термины, это допустимо:
ArrayList<? super A> listOfSuperA = new ArrayList<Object>();
Это не:
ArrayList<A> listOfA = new ArrayList<Object>();
Это означает, что вы можете получить значения различных типов из listOfA
и listOfSuperA
:
A a = listOfA.get(0); // valid
Object o = listOfA.get(0); // valid, because A can be converted to Object.
A a2 = listOfSuperA.get(0); // invalid, because listOfSuperA could contain Objects, which are not convertible to A
Object o2 = listOfSuperA.get(0); // valid, because whatever is in listOfSuperA, it can be converted to Object
Это может быть полезно, если вы хотите узнать больше о том, где использовать ? super T