Следующие будут работать нормально:
public List<? extends Foo> getFoos() { List<Foo> foos = new ArrayList<Foo>(); foos.add(new SubFoo()); return foos; }