Прежде всего вы сказали, что View расширяет ViewGroup, но на диаграмме сказано, что ViewGroup расширяет View (что я считаю правильным).
Во-вторых, вам не разрешено передавать List<ViewGroup>
как List<View>
. Это защита во время компиляции, которая не позволяет кому-либо добавить AnotherView в этот список и ставит под угрозу безопасность типов обобщений.
List<ViewGroup>
не является подтипом List<View>
, но это подтип List<? extends View>
. Таким образом, вы можете изменить свой метод так, чтобы вместо него принимать List<? extends View>
, но имейте в виду, что вы не можете добавить в список, переданный методу таким образом.
Существует также другой синтаксис, называемый подстановочным знаком нижней границы (List<? super ViewGroup>
), в отличие от упомянутого выше подстановочного знака верхней границы, который позволяет добавлять в список, но вы можете в любой момент передать список ViewGroup или его родителей.
Подробнее о подстановочных знаках в дженериках можно найти здесь: http://download.oracle.com/javase/tutorial/java/generics/wildcards.html