This question is not about why we initialize a list as interface over implementation e.g.
List<myObject> obj = new ArrayList<myObject>();
The question is what is the difference between the following two and why do they (apparently) work the same way?
//list and arraylist both have a type
List<myObject> obj = new ArrayList<myObject>();
//arraylist does not have a type
List<myObject> obj = new ArrayList<>();
Both pieces of code are equivalent and create ArrayLists with a type (myObject in your example):
List<myObject> obj = new ArrayList<myObject>();
List<myObject> obj = new ArrayList<>();
However the second example uses the diamond operator (<>) introduced in Java 7. It adds type inference and reduces the verbosity in the assignments.
See the following quote from the documentation:
You can replace the type arguments required to invoke the constructor of a generic class with an empty set of type parameters (
<>) as long as the compiler can infer the type arguments from the context. This pair of angle brackets is informally called the diamond.For example, consider the following variable declaration:
Map<String, List<String>> myMap = new HashMap<String, List<String>>();In Java SE 7, you can substitute the parameterized type of the constructor with an empty set of type parameters (
<>):Map<String, List<String>> myMap = new HashMap<>();
In your second example, Java assumes the type is myObject. So there is still a type.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With