4

Java 10 的发布带来了新的静态工厂方法,具体来说:

鉴于这些方法允许我们将Collections 复制到不同的Collection实现中,它们如何与现有方法进行比较和对比?

4

1 回答 1

8

就像List#of,Set#ofMap#ofEntries允许我们在 Java 9中创建不可修改copyOf的实现一样,这些方法提供了一种方便的方法来从 Java 10 中的现有s 和s (取决于方法,接受 a )创建不可修改的实现。CollectionMapMap#copyOfMap

这使我们可以轻松地从 a创建一个不可修改 的对象,反之亦然。Set<E>List<E>

虽然,这些方法带来了一些警告(引用文档java.util.List

  • 它们是不可修改的。不能添加、删除或替换元素。调用 List 上的任何 mutator 方法总是会导致抛出 UnsupportedOperationException。但是,如果包含的元素本身是可变的,这可能会导致 List 的内容出现变化。
  • 它们不允许空元素。尝试使用 null 元素创建它们会导致 NullPointerException。
  • 如果所有元素都是可序列化的,则它们是可序列化的。
  • 列表中元素的顺序与提供的参数或提供的数组中元素的顺序相同。
  • 它们是基于价值的。调用者不应对返回的实例的身份做出任何假设。工厂可以自由创建新实例或重用现有实例。因此,对这些实例的身份敏感操作(引用相等 (==)、身份哈希码和同步)是不可靠的,应该避免。
  • 它们按照序列化表单页面上的指定进行序列化。

有关 and 的注意事项Set#copyOfMap#copyOf请参阅他们的文档。

于 2018-03-03T22:09:55.293 回答