为什么不会是可能的迭代对象放入的路径引用(它实现了Iterable?可迭代<Path> VS路径
Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories();
for (Path name: dirs) {
System.err.println(name);
}
如果我改变Iterable<Path>
与Path
它确实给我一个编译错误。为什么呢?难道不应该更程序到接口头脑?
为什么不会是可能的迭代对象放入的路径引用(它实现了Iterable?可迭代<Path> VS路径
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
所以一个Path
是Iterable<Path>
。那是什么意思?显而易见的解释是递归层次结构有一个中心概念。情况并非如此。该API有点困惑。 A Path
可以组成一系列的原子元素。例如我猜/etc/passwd
是一个序列(etc, passwd)
。显然,我们在这里有不止一个概念,但建模很薄弱。
因此,FileSystem.getRootDirectories
将返回一组(不知道为什么它是Iterable
)完全合格的路径。 (例如,我猜(C:\, D:\, Z:\)
。)该集合的每个元素将会(应该有)一系列路径原子。 getRoorDirectories
返回单个的Path
是没有意义的,它具有全限定路径名作为其元素。希望退回Iterable
到Path
的演员阵容会失败。
路径-A可迭代但可迭代IS NOT路径。 所以你需要做的类型转换
真的,演员应该失败! – 2013-05-11 12:01:55
我不明白这个问题。你能否添加关于你认为应该能写的内容的解释,以及你期望它能做什么。 – 2013-05-11 11:01:15
'Path'比'Iterable'更专业 - 因此如果'getRootDirectories()'只契约'Iterable ',你就不能将它分配给更特殊的类型。 –
Howard
2013-05-11 11:03:34