In the following example:
public static void main(String[] args) {
List b = new ArrayList();
first(b);
second(b);
List> == List { //That contains any unknown type lists
List,
List,
List
Where as
List extends List> == List { //That contains same unknown type lists
List,
List,
List
}
So here
List> == List { //That contains same String lists
List,
List,
List
}
Hence List extends List> is super type of List and assignable. >
So valid value to call your fourth method is below.
List> a1 = new ArrayList>();
a1.add(new ArrayList());
a1.add(new ArrayList());
a1.add(new ArrayList