import java.util.*; class IdeaGenericsTest { interface Animal<T extends Animal<T>> { List<T> getFriends(); } class Dog implements Animal<Dog> { public List<Dog> getFriends() { return null; } } class Cat implements Animal<Cat> { public List<Cat> getFriends() { return null; } } void mixAnimals() { ArrayList<Dog> dogs = null; ArrayList<Cat> cats = null; <error descr="Inferred type 'java.util.ArrayList<IdeaGenericsTest.Dog>' for type parameter 'V' is not within its bound; should extend 'java.util.ArrayList<IdeaGenericsTest.Cat>'">makeFriends(cats, dogs)</error>; } private<T extends Animal<T>, V extends ArrayList<T>> void makeFriends(ArrayList<T> someAnimals, V otherAnimals) { someAnimals.add(otherAnimals.get(0)); } }