Jac*_* G. 4 java collections factory-method java-10
Java 10的发布带来了新的静态工厂方法,特别是:
static <E> List<E> copyOf?(Collection<? extends E> coll)static <E> Set<E> copyOf?(Collection<? extends E> coll)static <K,V> Map<K,V> copyOf?(Map<? extends K,? extends V> map)看到这些方法允许我们将Collections 复制到不同的Collection实现中,它们如何与现有方法进行比较和对比?
正如List#of,Set#of以及Map#ofEntries允许我们创建不可改变的在Java中实现9,该copyOf方法提供了一种方便的方法来创建不可改变从现有的实现CollectionS和MapS(取决于方法,作为Map#copyOf接受Map)在Java中10.
这使我们可以轻松地创建一个不可修改 Set<E>的List<E>,反之亦然.
虽然,这些方法带来了几个注意事项(引述文件的java.util.List):
- 它们是不可修改的.无法添加,删除或替换元素.在List上调用任何mutator方法将始终导致抛出UnsupportedOperationException.但是,如果包含的元素本身是可变的,则可能导致List的内容看起来发生变化.
- 他们不允许使用null元素.尝试使用null元素创建它们会导致NullPointerException.
- 如果所有元素都可序列化,则它们是可序列化的.
- 列表中元素的顺序与提供的参数的顺序或提供的数组中的元素的顺序相同.
- 它们是基于价值的.调用者不应对返回实例的身份做出任何假设.工厂可以自由创建新实例或重用现有实例.因此,对这些实例的身份敏感操作(引用相等(==),标识哈希代码和同步)是不可靠的,应该避免.
- 它们按序列化表单页面上的指定进行序列化.
为了告诫Set#copyOf和Map#copyOf,参考它们的文档.