0

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

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

如果我改变Iterable<Path>Path确实会给我一个编译错误。为什么?它不应该更注重程序到界面吗?

4

2 回答 2

1

路径是可迭代的,但可迭代的不是路径。所以你需要做类型转换

于 2013-05-11T11:09:03.070 回答
1

因此,查看java.nio.fileAPI 文档:

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失败。

于 2013-05-11T12:01:38.100 回答