我看到的DirectoryStream的唯一用法是使用Path类型作为它的类型参数,DirectoryStream<Path>来自Files.newDirectoryStream(Path)。
此外,我不明白为什么它允许任何类型,因为在文档中有以下语句:
如果hasNext方法返回true,然后是对下一个方法的调用,则保证下一个高级方法不会因为I/O错误或流已经关闭而抛出异常。
这意味着它必须检查Path是否可以预先访问,因此不能是泛型类型。
发布于 2017-01-15 14:10:49
为什么
java.nio.file.DirectoryStream使用无界泛型? 我看到的DirectoryStream的唯一用法是使用Path类型作为它的类型参数,DirectoryStream<Path>来自Files.newDirectoryStream(Path)。
如果您查看SecureDirectoryStream,该接口用一个无界泛型扩展了DirectoryStream。然而,SecureDirectoryStream的唯一具体实现也是用Path参数化的。
因此,最合理的解释是:
File的目录流,但是它被放弃了.太晚了,不能完全去掉参数。不管怎样,目前这个参数是一个无害的异常。
这意味着它必须检查路径是否可以预先访问,因此不能是泛型类型。
该参数可能是无界的,因为Path和File没有合适的公共超级接口。它不可能是任何类型的.很不幸,但绝不是独一无二的。在其他情况下,有隐含的类型要求没有在静态类型中表达。例如:
ObjectOutputStream.writeObject(Object),则Serializable方法将失败。Arrays.sort(Object[]),则Comparable方法将失败。我希望还有其他一些例子,其中泛型类的一些参数化没有什么意义。
发布于 2017-01-15 12:08:05
‘这意味着它必须事先检查路径是否是可访问的。是的,它可以。
如果获取的元素是hasNext() else true,则该元素实际上将获取并返回false。
因此,当您在next()之后调用hasNext()时,它不会付出任何额外的努力,而只是返回获取的(从hasNext()获取的)元素。
发布于 2017-01-15 12:11:03
系统正在缓冲下一个元素。这来自Javadocs:
由于提前阅读,Iterator可能在目录流关闭后返回一个或多个元素.一旦读取了这些缓冲元素,那么对hasNext方法的后续调用将返回false,随后对下一个方法的调用将引发NoSuchElementException。
https://stackoverflow.com/questions/41660795
复制相似问题