Я немного запутался по поводу ковариации и контравариантности. Говорим ли мы, что в Java что-то обычно противоречиво, когда мы используем ? super X
.
Теперь, читая мою книгу, я понял следующую концепцию:
это противоречиво:
method(Predicate<? super X> pred)
но этот ковариантный:
method(List<? super X> list) //And then we use add for a list of course
Эта концепция написана не совсем так, как я вас спрашиваю, поэтому я хочу знать, верно ли это определение? Если да, то почему первый является контравариантным, а последний - ковариантным, если оба используют ключевое слово super
?