在Java SE 7之前,声明泛型对象的代码如下:
List<String> list = new ArrayList<String>();
而在Java 7中,可以使用如下代码:
List<String> list = new ArrayList<>();
因为编译器可以从前面(List)推断出推断出类型参数,所以后面的ArrayList之后可以不用写泛型参数,只用一对空着的尖括号就可以。Java 7 只支持有限的类型推断:只有构造器的参数化类型在上下文中被显著的声明了,才可以使用类型推断,否则不行,例如:
List<String> list = new ArrayList<>();
list.add("A");
list.addAll(new ArrayList<>()); //这样声明不合法
List<? extends String> list2 = new ArrayList<>(); //这样声明合法
list.addAll(list2);