Acu*_*zio 2 java containers sublist
下面的代码工作正常。
List<Integer> arr = new ArrayList<Integer>();
System.out.println(arr.getClass().getSimpleName()); // output: ArrayList
arr.add(0);
arr.add(1);
arr = arr.subList(0,1);
Run Code Online (Sandbox Code Playgroud)
但是如果你将第一行更改为
var arr = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
会出现错误:
java: 不兼容的类型: java.util.List<java.lang.Integer> 无法转换为 java.util.ArrayList<java.lang.Integer>
然而,即使arr是用第二种方式定义的,它的类型仍然是ArrayList,那么有什么区别呢?
当你写的时候
var arr = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
编译器将变量的类型推断arr为ArrayList<Integer>,因此相当于编写:
ArrayList<Integer> arr = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
arr.subList(0,1)返回 a List<Integer>,它不能分配给 an ArrayList<Integer>,因为 anArrayList<Integer>是 的实现List<Integer>,但并非所有实现List<Integer>都是ArrayList<Integer>。
另一方面,当您将变量声明为 时List<Integer> arr,您可以为其分配 的任何实现List<Integer>,其中包括 的返回值arr.subList(0,1)。
需要注意的是,它subList不会返回ArrayList. 例如,subList()方法ArrayList返回名为 的内部类的实例ArrayList$SubList。不能将其List分配给类型为 的变量ArrayList。
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |