首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么java.nio.file.DirectoryStream使用无界泛型?

为什么java.nio.file.DirectoryStream使用无界泛型?
EN

Stack Overflow用户
提问于 2017-01-15 11:54:43
回答 3查看 176关注 0票数 1

我看到的DirectoryStream的唯一用法是使用Path类型作为它的类型参数,DirectoryStream<Path>来自Files.newDirectoryStream(Path)

此外,我不明白为什么它允许任何类型,因为在文档中有以下语句:

如果hasNext方法返回true,然后是对下一个方法的调用,则保证下一个高级方法不会因为I/O错误或流已经关闭而抛出异常。

这意味着它必须检查Path是否可以预先访问,因此不能是泛型类型。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-15 14:10:49

为什么java.nio.file.DirectoryStream使用无界泛型? 我看到的DirectoryStream的唯一用法是使用Path类型作为它的类型参数,DirectoryStream<Path>来自Files.newDirectoryStream(Path)

如果您查看SecureDirectoryStream,该接口用一个无界泛型扩展了DirectoryStream。然而,SecureDirectoryStream的唯一具体实现也是用Path参数化的。

因此,最合理的解释是:

  • 参数化是为了支持将来可能的增强,或者
  • 最初的意图是提供File的目录流,但是它被放弃了.太晚了,不能完全去掉参数。

不管怎样,目前这个参数是一个无害的异常。

这意味着它必须检查路径是否可以预先访问,因此不能是泛型类型。

该参数可能是无界的,因为PathFile没有合适的公共超级接口。它不可能是任何类型的.很不幸,但绝不是独一无二的。在其他情况下,有隐含的类型要求没有在静态类型中表达。例如:

  • 如果对象不实现ObjectOutputStream.writeObject(Object),则Serializable方法将失败。
  • 如果数组元素没有全部实现Arrays.sort(Object[]),则Comparable方法将失败。

我希望还有其他一些例子,其中泛型类的一些参数化没有什么意义。

票数 3
EN

Stack Overflow用户

发布于 2017-01-15 12:08:05

‘这意味着它必须事先检查路径是否是可访问的。是的,它可以。

如果获取的元素是hasNext() else true,则该元素实际上将获取并返回false

因此,当您在next()之后调用hasNext()时,它不会付出任何额外的努力,而只是返回获取的(从hasNext()获取的)元素。

票数 0
EN

Stack Overflow用户

发布于 2017-01-15 12:11:03

系统正在缓冲下一个元素。这来自Javadocs:

由于提前阅读,Iterator可能在目录流关闭后返回一个或多个元素.一旦读取了这些缓冲元素,那么对hasNext方法的后续调用将返回false,随后对下一个方法的调用将引发NoSuchElementException。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41660795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档