Я постараюсь объяснить немного больше ...
1 не работает, потому что вы не можете заменить A<? super K>
на A<K extends Number>
... нет гарантии, что суперкласс расширяет тот же класс, что и подкласс.
1, 2 и 3 не работают, поскольку исходный параметр типа скрывает исходный K, используемый в объявлении класса.
5 не работает, потому что <V super K>
не может заменить <K extends Number>
... нет гарантии, что суперкласс расширяет тот же класс, что и подкласс.
6 и 7 должны быть очевидны.
4 работает, потому что если мы знаем, что V расширяет K, то мы знаем, что V расширяет Number (поскольку все классы, которые K расширяет V, расширяются). Поэтому мы можем заменить A<V>
на <K extends Number>
.
Надеюсь, в этом есть смысл ... кто-то может прийти и объяснить лучше.