No, you don't have two return types.It's a generic method you are seeing.
<E extends Foo> --> you are declaring a generic type for your method
List<E> --> this is your return type
Your method can have a generic type E which is a sub-class of Foo. your return type is a List<Foo or any SubType Of FOO>