Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
effective-java-3rd-chinese
提交
329dbd04
E
effective-java-3rd-chinese
项目概览
OpenDocCN
/
effective-java-3rd-chinese
9 个月 前同步成功
通知
214
Star
9
Fork
4
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
effective-java-3rd-chinese
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
329dbd04
编写于
4月 04, 2020
作者:
J
Joe
提交者:
GitHub
4月 04, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update 47. 优先使用Collection而不是Stream来作为方法的返回类型.md
上级
531aa253
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
2 addition
and
2 deletion
+2
-2
docs/notes/47. 优先使用Collection而不是Stream来作为方法的返回类型.md
docs/notes/47. 优先使用Collection而不是Stream来作为方法的返回类型.md
+2
-2
未找到文件。
docs/notes/47. 优先使用Collection而不是Stream来作为方法的返回类型.md
浏览文件 @
329dbd04
# 47. 优先使用 Collection 而不是 Stream 来作为方法的返回类型
许多方法返回元素序列(sequence)。在 Java 8 之前,通常方法的返回类型是
`Collection`
,
`Set`
和
`List`
这些接口;还包括
`Iterable`
和数组类型。通常,很容易决定返回哪一种类型。规范(norm)是
集合
接口。如果该方法仅用于启用 for-each 循环,或者返回的序列不能实现某些
`Collection`
方法 (通常是
`contains(Object)`
),则使用迭代(
`Iterable`
)接口。如果返回的元素是基本类型或有严格的性能要求,则使用数组。在 Java 8 中,将流(Stream)添加到平台中,这使得为序列返回方法选择适当的返回类型的任务变得非常复杂。
许多方法返回元素序列(sequence)。在 Java 8 之前,通常方法的返回类型是
`Collection`
,
`Set`
和
`List`
这些接口;还包括
`Iterable`
和数组类型。通常,很容易决定返回哪一种类型。规范(norm)是
返回
`Collection`
接口。如果该方法仅用于启用 for-each 循环,或者返回的序列不能实现某些
`Collection`
方法 (通常是
`contains(Object)`
),则使用迭代(
`Iterable`
)接口。如果返回的元素是基本类型或有严格的性能要求,则使用数组。在 Java 8 中,将流(Stream)添加到平台中,这使得为序列返回方法选择适当的返回类型的任务变得非常复杂。
你可能听说过,流现在是返回元素序列的明显的选择,但是正如
条目 45 所讨论的,流不会使迭代过时:编写好的代码需要明智地结合流和迭代。如果一个 API 只返回一个流,并且一些用户想用 for-each 循环遍历返回的序列,那么这些用户肯定会感到不安。这尤其令人沮丧,因为
`Stream`
接口在
`Iterable`
接口中包含唯一的抽象方法
,
`Stream`
的方法规范与
`Iterable`
兼容。阻止程序员使用 for-each 循环在流上迭代的唯一原因是
`Stream`
无法继承
`Iterable`
。
你可能听说过,流现在是返回元素序列的明显的选择,但是正如
第 45 条所讨论的,流不会使迭代过时:编写好的代码需要明智地将流和迭代结合起来。如果一个 API 只返回一个流,并且一些用户想用 for-each 循环遍历返回的序列,那么这些用户肯定会感到不安。这尤其令人沮丧,因为
`Stream`
接口只有一个抽象方法的返回值只
`Iterable`
,
`Stream`
的方法规范与
`Iterable`
兼容。阻止程序员使用 for-each 循环在流上迭代的唯一原因是
`Stream`
无法继承
`Iterable`
。
遗憾的是,这个问题没有好的解决方法。 乍一看,似乎可以将方法引用传递给
`Stream`
的 iterator 方法。 结果代码可能有点嘈杂和不透明,但并非不合理:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录