You don't need to. You might return a List<?> or a List<? super String>. There isn't much point to returning a List<? extends String> even though the compiler will permit it. It's all up to the definition of the contract that you are providing to your clients.