Iterable <path> vs Path </path>

时间:2013-05-11 10:56:16

标签: java path iterable

为什么不可能将可迭代对象放入Path引用(实现Iterable?

Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories();
for (Path name: dirs) {
    System.err.println(name);
}

如果我用Iterable<Path>更改Path,它确实会给我一个编译错误。为什么?难道不应该是更多的程序界面吗?

2 个答案:

答案 0 :(得分:1)

路径IS-A可转换但可转换不是路径。 所以你需要做类型转换

答案 1 :(得分:1)

所以,查看java.nio.file API文档:

public interface Path
    extends Comparable<Path>, Iterable<Path>, Watchable

所以PathIterable<Path>。那是什么意思?显而易见的解释是存在递归层次结构的核心概念。事实并非如此。 API有点困惑。 Path可以由一系列原子元素组成。例如,我猜/etc/passwd是一个序列(etc, passwd)。显然,我们在这里有不止一个概念,但建模很薄弱。

所以FileSystem.getRootDirectories将返回一个集合(不知道为什么它只是Iterable)一个完全限定的路径。 (例如,我猜(C:\, D:\, Z:\)。)集合中的每个元素都将(应该有)一系列路径原子。 getRoorDirectories返回一个具有完全限定路径名作为其元素的Path是没有意义的。希望返回的IterablePath的演员表失败。