为什么不能将可迭代对象放入 Path 引用(实现 Iterable?
Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories();
for (Path name: dirs) {
System.err.println(name);
}
如果我改变Iterable<Path>
它Path
确实会给我一个编译错误。为什么?它不应该更注重程序到界面吗?
路径是可迭代的,但可迭代的不是路径。所以你需要做类型转换
因此,查看java.nio.file
API 文档:
public interface Path
extends Comparable<Path>, Iterable<Path>, Watchable
所以 aPath
是一个Iterable<Path>
。这意味着什么?显而易见的解释是递归层次结构的核心概念。事实并非如此。API有点混乱。APath
可以由一系列原子元素组成。例如,我猜/etc/passwd
是一个序列(etc, passwd)
。显然我们这里有不止一个概念,但是建模很弱。
所以FileSystem.getRootDirectories
将返回一个集合(不知道为什么它Iterable
只是)一个完全限定的路径。(例如,我猜(C:\, D:\, Z:\)
。)集合的每个元素都将是(应该有)一个路径原子序列。getRoorDirectories
返回Path
具有完全限定路径名作为其元素的单个是没有意义的。希望回归的演员Iterable
应该Path
失败。