我知道这行不通,因为 List 是一个抽象接口:
List<Integer> l = new List<>();
这就是为什么我通常使用ArrayList<>
.
我很好奇为什么以下内容在将对象分配给时有效List<String> l
:
ArrayList<E> al = new ArrayList<>();
List<String> l = al.stream().collect(Collectors.toList());
据我了解,对象不能从接口创建,只有当它们被实现时。谁能解释为什么第二个代码片段有效以及我应该如何理解这种差异?
Collectors.toList()
会返回一些具体的List
实例。也许是一个ArrayList
,也许是别的东西。API 愿意保证的只是它符合接口List
。Javadoc明确指出:
您可以检查运行时返回的特定类型,但不应依赖它。