Java SE 7新特性:创建泛型实例时自动类型推断

转自:http://www.365mini.com/page/10.htm

在以前的版本中使用泛型类型,需要在声明并赋值的时候,两侧都加上泛型类型。例如:

Map<String, String> myMap = new HashMap<String, String>();

不过,在Java SE 7中,这种方式得以改进,现在你可以使用如下语句进行声明并赋值:

Map<String, String> myMap = new HashMap<>();    //注意后面的"<>"

在这条语句中,编译器会根据变量声明时的泛型类型自动推断出实例化HashMap时的泛型类型。再次提醒一定要注意new HashMap后面的「<>」,只有加上这个「<>」才表示是自动类型推断,否则就是非泛型类型的HashMap,并且在使用编译器编译源代码时会给出一个警告提示。

注意:Java SE 7在创建泛型实例时的类型推断是有限制的,你只能在联系上下文可以明确确定参数化类型的时候使用泛型推断。例如:下面的例子无法正确编译:

  
  
  
  
  1. List<String> list = new ArrayList<>();
  2. list.add("A");
  3. // 由于addAll期望获得Collection<? extends String>类型的参数,因此下面的语句无法通过
  4. list.addAll(new ArrayList<>());

与上面的例子相比,下面的这个例子可以通过编译:

  
  
  
  
  1. List<String> list = new ArrayList<>();
  2. list.add("A");
  3. List<? extends String> list2 = new ArrayList<>();
  4. list.addAll(list2);

你可能感兴趣的:(Java SE 7新特性:创建泛型实例时自动类型推断)