首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Spliterator的getExactSizeIfKnown()不调用hasCharacteristics()

为什么Spliterator的getExactSizeIfKnown()不调用hasCharacteristics()
EN

Stack Overflow用户
提问于 2015-11-04 15:54:05
回答 1查看 231关注 0票数 0

Spliterator类的源(JDK Spliterator)中,getExactSizeIfKnown()default实现通过直接调用abstract characteristics()方法和检查它是否包含SIZED来检查正在操作的实例是否具有SIZED特性,而不只是调用hasCharacteristics(SIZED)方法,后者有一个基本相同的default实现。

是否有任何理由不将getExactSizeIfKnown()实现为:

代码语言:javascript
复制
return !hasCharacteristics(SIZED) ? -1L : estimateSize();

在我看来,哪一种方式读得更清楚,似乎更好地处理了默认行为(目前,如果hasCharacteristics(int)过度使用bizzare,那么没有迹象表明getExactSizeIfKnown()也应该被覆盖)?

这里有什么东西我遗漏了吗?为什么要重复这种方法之间的检查呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-05 08:21:46

这个问题显然是在Spliterator类的设计过程中提出的。在这一讨论中引用Paul在OpenJDK邮件列表中的话:

作者: Mike Duigou - getExactSizeIfKnown() --使用hasCharacteristics我们可以,它的效率略高一些。

因此,似乎没有很强的理由,只是一个轻微的性能考虑。

另一方面,我认为你关于将hasCharacteristics(int)重写为“奇异的东西”的论点并不成立。如果要重写hasCharacteristics(int),那么characteristics()的实现也需要与这种“奇怪”行为保持一致,否则就会破坏Spliterator的契约。请注意,getExactSizeIfKnown()的实现规范(描述符合实现所需的行为)说:

默认实现返回estimateSize()的结果,如果Spliterator报告SIZED的特性,则为-1。

基于此,如果您重写了Spliterator特性的行为,则已经警告您,默认情况下,getExactSizeIfKnown()将受到影响。

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

https://stackoverflow.com/questions/33526235

复制
相关文章

相似问题

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