JAVA:与实例引用混淆
我对实例及其实现有一些相当严重的困惑JAVA:与实例引用混淆,java,list,interface,Java,List,Interface,我对实例及其实现有一些相当严重的困惑 List<String> lines = Files.readAllLines(Paths.get(fileAddress), Charset.defaultCharset()); 我犯了一个错误 类型不匹配:无法从列表转换为ArrayList 这怎么可能呢?Java编译器不知道该方法将返回哪种类型 java.util.list是一个包含所有已知列表接口实现的列表 这是readAllLines方法的签名 公共静态列表readAllLin
List<String> lines = Files.readAllLines(Paths.get(fileAddress),
Charset.defaultCharset());
我犯了一个错误
类型不匹配:无法从列表转换为ArrayList
这怎么可能呢?Java编译器不知道该方法将返回哪种类型
java.util.list
是一个包含所有已知列表接口实现的列表
这是readAllLines
方法的签名公共静态列表readAllLines(路径、字符集cs)引发IOException
文件 编译器只有
readAllLines
方法将返回List
的信息,但它没有将返回哪个实现的信息。因为这样,编译器无法编译代码 Java编译器不“知道”该方法将返回哪种类型
java.util.list
是一个包含所有已知列表接口实现的列表
这是readAllLines
方法的签名公共静态列表readAllLines(路径、字符集cs)引发IOException
文件
编译器只有
readAllLines
方法将返回List
的信息,但它没有将返回哪个实现的信息。因为这样,编译器无法编译代码 readAllLines
被定义为返回一个列表
,这是调用代码必须依赖的。它实际返回一个ArrayList
是一个实现细节,可以在不影响调用方的情况下进行更改“我还知道RHS实际上返回一个ArrayList,它是列表的一个实现”-您怎么知道的?通过查看实现,还是执行时的实际时间?Files.readAllLines
的声明只说明它返回一个列表
编译器根据定义编译代码。它不会窥探方法内部以查看实现的功能。(幸运的是.readAllLines
被定义为返回一个列表
,这是调用代码必须依赖的。它实际返回一个ArrayList
是一个实现细节,可以在不影响调用方的情况下进行更改“我还知道RHS实际上返回一个ArrayList,它是列表的一个实现”-您怎么知道的?通过查看实现,还是执行时的实际时间?Files.readAllLines
的声明只说明它返回一个列表
编译器根据定义编译代码。它不会窥探方法内部以查看实现的功能。(幸运的是。)
ArrayList<String> lines = Files.readAllLines(Paths.get(fileAddress),
Charset.defaultCharset());