The super wildcard is there to guarantee that you do not pass a List with a Generic type that is a subtype of IOException.
Which means you could not do this:
List<? super IOException> arrayList = new ArrayList<FileNotFoundException>();
this will not work.
Now, this means the compiler just made sure that the generic type of the list you're passing is IOException or a superclass of IOException
And since we know that we can assign any object to a reference of its supertype in
Java (for instance, a List<Exception> can take as a parameter in its add() method an Exception or any of its subclasses)...
What did the compiler just make sure?