JAVA:与实例引用混淆

标签 java list interface

我对实例及其实现有一些非常严重的困惑。

List<String> lines = Files.readAllLines(Paths.get(fileAddress),
    Charset.defaultCharset());

上面的代码是有效的,因为我知道 List<String>是一个接口(interface),但我可以使用它的类型作为引用变量,而且我也知道 RHS 实际上返回 ArrayList这是 List 的实现。另外,lines.getClass().getName()返回java.util.ArrayList可以肯定的是。

但令人惊讶的是,当我这样做时,

ArrayList<String> lines = Files.readAllLines(Paths.get(fileAddress),
    Charset.defaultCharset());

我收到错误,

Type mismatch: cannot convert from List<String> to ArrayList<String>

这怎么可能?

最佳答案

Java 编译器不“知道”该方法将返回哪种类型。

java.util.listinterface并且有一个包含所有已知列表接口(interface)实现的列表。

这是 readAllLines 的签名方法
public static List<String> readAllLines(Path path, Charset cs) throws IOException
Files.readAllLines 的文档.

编译器仅具有 readAllLines 的信息方法将返回 List<String> ,但它不知道它将是哪个实现。因为它编译器无法编译代码。

关于JAVA:与实例引用混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43562492/

相关文章:

Java,接口(interface)可以继承吗?

python - DBus 接口(interface)属性

java - 使用递归 Java 查找列表中的最大数字

java - 无法从 JavaScript 建立 WebSocket 连接

.net - .Net 中 List.h 的模拟

Python - 操作列表以创建另一个列表

java - SpringBoot应用程序忽略HibernateValidator的xml配置

java - 为从 i 到 n 求和的递归方法编程

r - 对矩阵列表求和

java - 在Java中使用接口(interface)作为构造函数参数?