2013-05-11 36 views
0

为什么不会是可能的迭代对象放入的路径引用(它实现了Iterable?可迭代<Path> VS路径

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

如果我改变Iterable<Path>Path它确实给我一个编译错误。为什么呢?难道不应该更程序到接口头脑?

+1

我不明白这个问题。你能否添加关于你认为应该能写的内容的解释,以及你期望它能做什么。 – 2013-05-11 11:01:15

+2

'Path'比'Iterable '更专业 - 因此如果'getRootDirectories()'只契约'Iterable ',你就不能将它分配给更特殊的类型。 – Howard 2013-05-11 11:03:34

回答

1

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

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

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

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

1

路径-A可迭代但可迭代IS NOT路径。 所以你需要做的类型转换

+0

真的,演员应该失败! – 2013-05-11 12:01:55