【Java7新特性】创建泛型实例时自动类型推断

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

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);


赞(52) 打赏
未经允许不得转载:优客志 » JAVA开发
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏