I have a group of classes that all implement a validation interface which has the method isValid(). I want to put a group of objects--all of different classes--
If a generic class's T is extends Foo>, then the only thing you can pass to a method that takes T is null -- not any subclass that extends Foo.
The reason is that List extends Validation> doesn't mean "a list of things that extend Validation". You can get that with just List. Instead, it means "a list of some type, such that that type extends Validation."
It's a subtle distinction, but basically the idea is that List extends T> is a subtype of List, and you therefore don't want to be able to insert anything into it. Think of this case:
List foos = new ArrayList<>();
List extends Validation> validations = foos; // this is allowed
validations.add(new BarValidation()); // not allowed! this is your question
FooValidation foo = foos.get(0);
If the third line were allowed, then the last line would throw a ClassCastException.