import java.util.List; class GenericsError { private static class ListHolder { private List list; private void forEach(final Looper looper) { for (final T item : list) { looper.loopItem(item); } } private void forEach(final DeletingLooper looper) { for (final T item : list) { looper.loopItem(item); } } } private interface Looper { void loopItem(final T a); } private interface DeletingLooper extends Looper { } private static class MyDeletingLooper implements DeletingLooper { @Override public void loopItem(final B a) { } } private class A { } private class B extends A { } public static void main(final String[] args) { final ListHolder aListHolder = new ListHolder(); final DeletingLooper bLooper = new MyDeletingLooper(); aListHolder.forEach(bLooper); } }