Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Initializing arraylist without object type - JAVA [duplicate]

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<>();
like image 836
gogogaga Avatar asked Jan 29 '26 12:01

gogogaga


2 Answers

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<>();
like image 50
cassiomolin Avatar answered Jan 31 '26 03:01

cassiomolin


In your second example, Java assumes the type is myObject. So there is still a type.

like image 23
Stefan Avatar answered Jan 31 '26 01:01

Stefan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!