I want to understand the difference between the two definitions and why the correct one is correct and the wrong is wrong.
The one showing me the compile-error
List> arr2 = new ArrayList>();
The error it gave me :
try2.java:8: error: incompatible types: ArrayList> cannot be
converted to List>
List> arr2 = new ArrayList>();
The one which is working:
List> arr = new ArrayList>();
NOTE:
I understand why the below one works:
List arr = new ArrayList();
Edit-1:
Now i just want to understand what is wrong with List> arr2 = new ArrayList>();
解决方案
You could use the diamond operator, as GhostCat suggested, and let the compiler worry about the correct type.
But if you want to understand what the correct type should be, use:
List> arr2 = new ArrayList>();
You are instantiating a List of something (let's forget for a second that something happens to be a List), so you need to create an instance of a class that implements the List interface - ArrayList in this case. So you create an instance of ArrayList of something.
The element type (my so called "something") - List in your example - remains unchanged.
Now, when you want to add an element to your List, you need to create an instance of a class that implements List:
List inner = new ArrayList();
arr2.add(inner);