Stub.java:5: <E>add(java.util.List<E>) in Stub cannot be applied to (java.util.List<java.lang.Object>)
Case 1 works but Case 3 does not work because in Case 1 E should be of type CharSequence and String implements CharSequence so condition satisfies with compile time type checking
and in Case 3 list is holding objects of type Object which do not implements CharSequence.
A wildcard can have only one bound, either a lower or an upper bound. A list of wildcard bounds is not permitted.
A type parameter, in constrast, can have several bounds, but there is no such thing as a lower bound for a type parameter like E super CharSequence
So you cannot use <E super CharSequence> but you can use <E extends CharSequence> syntax.