我对实例及其实现有一些非常严重的困惑。
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.list
是 interface并且有一个包含所有已知列表接口(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/