Previously when using generics you had to specify the type twice, in the declaration and the constructor;
List<String> strings = new ArrayList<String>();
In Java 7, you just use the diamond operator without the type;
List<String> strings = new ArrayList<>();
List<String> strings = new ArrayList<String>();
In Java 7, you just use the diamond operator without the type;
List<String> strings = new ArrayList<>();
If the compiler can infer the type arguments from the context, it does all the work for you. Note that you have always been able do a “new ArrayList()” without the type, but this results in an unchecked conversion warning.
Type inference becomes even more useful for more complex cases;
Before Java 7
Map<String, Map<String,int>> mS = new HashMap<String, Map<String,int>>();
Java 7
Map<String, Map<String, int> mS = new HashMap();
Java SE 7 supports limited type inference for generic instance creation; you can only use type inference if the parameterized type of the constructor is obvious from the context. For example, the following example does not compile:
List<String> list = new ArrayList<>(); list.add("A"); // The following statement should fail since addAll expects // Collection<? extends String> list.addAll(new ArrayList<>());
Note that the diamond often works in method calls; however, it is suggested that you use the diamond primarily for variable declarations.
In comparison, the following example compiles:
// The following statements compile: List<? extends String> list2 = new ArrayList<>(); list.addAll(list2);
No comments:
Post a Comment