API java 5 及更多:我应该返回数组还是集合?

2024-03-24

本着最佳实践:始终返回 ____,从不返回 ____ https://stackoverflow.com/questions/171156/best-practices-always-return-a-never-a,我在即将到来的文章中面临类似的问题从 JDK1.4.2 迁移到 JDK5 等 https://stackoverflow.com/questions/219164/generics-in-legacy-code。 (是的,我know, JDK1.4.2 已停产! http://java.sun.com/products/archive/eol.policy.html ;-) ).

对于返回集合的函数(这并不简单财产收藏 https://stackoverflow.com/questions/35007/how-to-expose-a-collection-property),我总是更喜欢(在 JDK1.4.2 中)返回 Array 而不是泛型 List,因为:

  • 它强制返回类型(MyObject[]而不是对象列表,还有更多类型安全在静态(如“编译”级别)
  • it suggests返回集合的“只读”字符(将元素添加到集合中更为复杂,尽管这不像 C# 中的“只读”关键字那么严格)。这与说它是“不可变的”不同,因为数组内的引用仍然可以修改......

当然,我总是create返回的数组(我不公开任何“内部”数组)

现在,在 JDK5 及更高版本中,我可以使用List<MyObject>如果我想。

选择回国的充分理由有哪些MyObject[]而不是列表或Collection<MyObject>当用java5编码时?

奖金,如果Collection<MyObject>使用时,是否可以:

  • 对返回的集合强制执行只读属性? (不add() or remove()可能的)
  • 对返回的集合强制执行不可变的方面? (即使该集合的引用也无法修改)

PS: The Java通用常见问题解答 http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html不太有那个。


优先选择 Collection(或 List,或 Set,视情况而定)而不是数组。使用泛型,您可以获得 Java 5 之前所缺少的类型检查。此外,通过仅公开接口,您可以在以后随意更改实现(例如,将 ArrayList 切换为 LinkedList)。

数组和泛型不能很好地混合。所以,如果你想利用泛型,你应该usually避免数组。
即:您通常不能创建数组。例如,如果 T 是泛型类型,则“new T[0]”无法编译。您必须执行类似“(T[]) new Object[0]”的操作,这会生成未经检查的强制转换警告。出于同样的原因,您不能在没有警告的情况下将泛型类型与可变参数一起使用。

Using Collections.unmodifierCollection http://java.sun.com/javase/6/docs/api/java/util/Collections.html#unmodifiableCollection(java.util.Collection)(和类似的方法),您将获得只读约束(这是无法使用数组实现的 - 您必须返回数组的克隆)。

您无法强制成员的不变性,但也无法使用数组来做到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

API java 5 及更多:我应该返回数组还是集合? 的相关文章

随机推荐

  • Jtable 编辑单元格的外观和感觉

    有一个JTable with DefaultTableModel 有桌子的setforeground setbackground and setselectioncolor方法 另外 当您编辑单元格时 您有table setDefaultE
  • 获取图像的特定部分(图片)

    我想剪切图片的特定部分 并用它来将裁剪后的图像与硬盘中存储的另一图像进行比较 问题是我不知道如何获取源图像的 特定部分 我知道要裁剪的图像的位置 X Y 这将加载原始文件并创建一个从 0 0 开始 尺寸为 64x64 的裁剪版本 Bitma
  • MVVM 中的故事板动画

    我试图淡入然后淡出文本块以在 MVVM 中显示成功消息 但我无法让它再次淡出 我看了这个 WPF MVVM 属性更改动画 https stackoverflow com questions 1649828 wpf mvvm property
  • 错误:LaTeX 中缺少 \begin{document} [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的 LaTeX 文档中有错误 运行我的文件时出现错误 LaTeX Error Missing begin document 和这个标签
  • 如何跟踪语速

    我正在开发一个跟踪语速的 iPhone 应用程序 并希望使用 Nuance Speechkit https developer nuance com public Help DragonMobileSDKReference iOS Spee
  • 在另一个角上绘制一个图形

    我应该如何在 R 中的另一个图的角落呈现一个小图 我知道这个问题已经结束了 但我要把这个例子留给后代 一旦掌握了基础知识 您就可以使用基本的 网格 包轻松地进行这样的自定义可视化 这是我使用的一些自定义函数的快速示例以及绘制数据的演示 自定
  • ListView 保持选中状态?

    我有一个充满项目的列表视图 在用户选择一个项目后它会亮起 然后恢复正常 有没有办法让用户在 ListView 中选择一个项目时它保持选中状态并突出显示 显然 消失的选择 是有意设计的 这是一种叫做 触摸模式 http developer a
  • Spring Boot 使用 SpringPhysicalNamingStrategy 实现多数据源

    需要配置多个数据源的 Spring boot 应用程序 多个数据源配置正在使用单独的datasource entityManager and transactionManager 此外 休眠命名配置还可以使用具有以下配置的单个数据源 spr
  • Git:如何提交未跟踪的内容?

    概要 git status 给出 未暂存提交的更改 使用 git add 来更新 将承诺什么 使用 git checkout 来丢弃 工作目录的更改 提交或丢弃未跟踪的或 修改子模块中的内容 修改的 修改内容 未跟踪内容 In case g
  • Delta Lake 回滚

    需要一种优雅的方式将 Delta Lake 回滚到以前的版本 我目前的方法如下 import io delta tables val deltaTable DeltaTable forPath spark testFolder spark
  • Pow() 计算错误?

    我需要在我的 C 程序中使用 pow 如果我调用pow 这样运行 long long test pow 7 e Where e 是一个整数值 值为 23 我总是得到821077879因此 如果我用Windows计算器计算它我得到273687
  • 奇怪的@IBAction 冲突或错误? (迅速)

    所以我得到了我的简单 iOS 应用程序的代码 当我按下 touchPressed 按钮时 该按钮应该在屏幕上获得一个新的随机位置 并且 labelScore 应该根据按钮触摸的次数进行自我更新 我的一个朋友在 Objective C 中尝试
  • 如何使用 HTTPClient 设置 HTTP 请求标头“身份验证”?

    我想在向服务器发送 POST 请求时设置 HTTP 请求标头 授权 我该如何在 Java 中做到这一点 HttpClient 有支持吗 http www w3 org Protocols HTTP HTRQ Headers html z9
  • ExpandableTextView 中的复制功能在更改方向时会产生错误

    我在片段中创建了一些可扩展的文本视图 但没有启用复制功能 即使我改变方向 这也能正常工作 但当我给android textIsSelectable true 在 xml TextView 中 我面临的问题是 当改变方向时 所有 TextVi
  • 如何将 Spark Dataframe 推送到 Elastic Search (Pyspark)

    初学者 ES 问题在这里 将 Spark Dataframe 推送到 Elastic Search 的工作流程或步骤是什么 根据研究 我相信我需要使用Spark newAPIHadoopFile https spark apache org
  • 建模/记录功能程序

    我发现 UML 对于记录 OO 系统的各个方面非常有用 特别是用于总体架构的类图和用于说明特定例程的序列图 我想为我的 clojure 应用程序做同样的事情 我目前对模型驱动开发不感兴趣 只是对交流应用程序如何工作感兴趣 UML 是函数式编
  • 向 HashMap 添加一个键而不添加值?

    有没有一种方法可以在不添加值的情况下向 HashMap 添加键 我知道这看起来很奇怪 但我有一个HashMap
  • 一个意料之外的问题发生了。请稍后再试。 (3200000)

    任何人都可以在 Google Play 商店中的管理发布中遇到问题吗 当我尝试在生产轨道上上传应用程序时 没开啊我收到这个错误 An unexpected error occurred Please try again later 3200
  • Laravel - 嵌套关系中的 orderBy

    我有一个这样雄辩的查询 Forum with comments user gt find id 这将返回一个嵌套结果forum gt its comments gt user who commented 我该如何申请orderBy on c
  • API java 5 及更多:我应该返回数组还是集合?

    本着最佳实践 始终返回 从不返回 https stackoverflow com questions 171156 best practices always return a never a 我在即将到来的文章中面临类似的问题从 JDK1