< prev index next >

src/java.base/share/classes/java/util/List.java

Print this page
rev 17661 : 8177290: add copy factory methods for unmodifiable List, Set, Map
8184690: add Collectors for collecting into unmodifiable List, Set, and Map
Reviewed-by: XXX

*** 85,103 **** * the insertion of an ineligible element into the list may throw an * exception or it may succeed, at the option of the implementation. * Such exceptions are marked as "optional" in the specification for this * interface. * ! * <h2><a id="immutable">Immutable List Static Factory Methods</a></h2> ! * <p>The {@link List#of(Object...) List.of()} static factory methods ! * provide a convenient way to create immutable lists. The {@code List} * instances created by these methods have the following characteristics: * * <ul> ! * <li>They are <em>structurally immutable</em>. Elements cannot be added, removed, ! * or replaced. Calling any mutator method will always cause ! * {@code UnsupportedOperationException} to be thrown. * However, if the contained elements are themselves mutable, * this may cause the List's contents to appear to change. * <li>They disallow {@code null} elements. Attempts to create them with * {@code null} elements result in {@code NullPointerException}. * <li>They are serializable if all elements are serializable. --- 85,104 ---- * the insertion of an ineligible element into the list may throw an * exception or it may succeed, at the option of the implementation. * Such exceptions are marked as "optional" in the specification for this * interface. * ! * <h2><a id="unmodifiable">Unmodifiable Lists</a></h2> ! * <p>The {@link List#of(Object...) List.of} and ! * {@link List#copyOf List.copyOf} static factory methods ! * provide a convenient way to create unmodifiable lists. The {@code List} * instances created by these methods have the following characteristics: * * <ul> ! * <li>They are <a href="Collection.html#unmodifiable"><i>unmodifiable</i></a>. Elements cannot ! * be added, removed, or replaced. Calling any mutator method on the List ! * will always cause {@code UnsupportedOperationException} to be thrown. * However, if the contained elements are themselves mutable, * this may cause the List's contents to appear to change. * <li>They disallow {@code null} elements. Attempts to create them with * {@code null} elements result in {@code NullPointerException}. * <li>They are serializable if all elements are serializable.
*** 774,786 **** return Spliterators.spliterator(this, Spliterator.ORDERED); } } /** ! * Returns an immutable list containing zero elements. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @return an empty {@code List} * * @since 9 --- 775,787 ---- return Spliterators.spliterator(this, Spliterator.ORDERED); } } /** ! * Returns an unmodifiable list containing zero elements. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @return an empty {@code List} * * @since 9
*** 788,800 **** static <E> List<E> of() { return ImmutableCollections.List0.instance(); } /** ! * Returns an immutable list containing one element. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the single element * @return a {@code List} containing the specified element * @throws NullPointerException if the element is {@code null} --- 789,801 ---- static <E> List<E> of() { return ImmutableCollections.List0.instance(); } /** ! * Returns an unmodifiable list containing one element. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the single element * @return a {@code List} containing the specified element * @throws NullPointerException if the element is {@code null}
*** 804,816 **** static <E> List<E> of(E e1) { return new ImmutableCollections.List1<>(e1); } /** ! * Returns an immutable list containing two elements. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @return a {@code List} containing the specified elements --- 805,817 ---- static <E> List<E> of(E e1) { return new ImmutableCollections.List1<>(e1); } /** ! * Returns an unmodifiable list containing two elements. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @return a {@code List} containing the specified elements
*** 821,833 **** static <E> List<E> of(E e1, E e2) { return new ImmutableCollections.List2<>(e1, e2); } /** ! * Returns an immutable list containing three elements. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element --- 822,834 ---- static <E> List<E> of(E e1, E e2) { return new ImmutableCollections.List2<>(e1, e2); } /** ! * Returns an unmodifiable list containing three elements. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element
*** 839,851 **** static <E> List<E> of(E e1, E e2, E e3) { return new ImmutableCollections.ListN<>(e1, e2, e3); } /** ! * Returns an immutable list containing four elements. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element --- 840,852 ---- static <E> List<E> of(E e1, E e2, E e3) { return new ImmutableCollections.ListN<>(e1, e2, e3); } /** ! * Returns an unmodifiable list containing four elements. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element
*** 858,870 **** static <E> List<E> of(E e1, E e2, E e3, E e4) { return new ImmutableCollections.ListN<>(e1, e2, e3, e4); } /** ! * Returns an immutable list containing five elements. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element --- 859,871 ---- static <E> List<E> of(E e1, E e2, E e3, E e4) { return new ImmutableCollections.ListN<>(e1, e2, e3, e4); } /** ! * Returns an unmodifiable list containing five elements. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element
*** 878,890 **** static <E> List<E> of(E e1, E e2, E e3, E e4, E e5) { return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5); } /** ! * Returns an immutable list containing six elements. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element --- 879,891 ---- static <E> List<E> of(E e1, E e2, E e3, E e4, E e5) { return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5); } /** ! * Returns an unmodifiable list containing six elements. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element
*** 900,912 **** return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5, e6); } /** ! * Returns an immutable list containing seven elements. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element --- 901,913 ---- return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5, e6); } /** ! * Returns an unmodifiable list containing seven elements. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element
*** 923,935 **** return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5, e6, e7); } /** ! * Returns an immutable list containing eight elements. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element --- 924,936 ---- return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5, e6, e7); } /** ! * Returns an unmodifiable list containing eight elements. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element
*** 947,959 **** return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5, e6, e7, e8); } /** ! * Returns an immutable list containing nine elements. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element --- 948,960 ---- return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5, e6, e7, e8); } /** ! * Returns an unmodifiable list containing nine elements. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element
*** 972,984 **** return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5, e6, e7, e8, e9); } /** ! * Returns an immutable list containing ten elements. * ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element --- 973,985 ---- return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5, e6, e7, e8, e9); } /** ! * Returns an unmodifiable list containing ten elements. * ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @param <E> the {@code List}'s element type * @param e1 the first element * @param e2 the second element * @param e3 the third element
*** 998,1009 **** return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10); } /** ! * Returns an immutable list containing an arbitrary number of elements. ! * See <a href="#immutable">Immutable List Static Factory Methods</a> for details. * * @apiNote * This method also accepts a single array as an argument. The element type of * the resulting list will be the component type of the array, and the size of * the list will be equal to the length of the array. To create a list with --- 999,1010 ---- return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10); } /** ! * Returns an unmodifiable list containing an arbitrary number of elements. ! * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. * * @apiNote * This method also accepts a single array as an argument. The element type of * the resulting list will be the component type of the array, and the size of * the list will be equal to the length of the array. To create a list with
*** 1036,1041 **** --- 1037,1061 ---- return new ImmutableCollections.List2<>(elements[0], elements[1]); default: return new ImmutableCollections.ListN<>(elements); } } + + /** + * Returns an unmodifiable List containing the elements of the given Collection, + * in iteration order. See <a href="#unmodifiable">Unmodifiable Lists</a> for + * information about the characteristics of the returned List. + * + * @param <E> the {@code List}'s element type + * @param coll the collection from which elements are drawn + * @return the new List + * @since 10 + */ + @SuppressWarnings("unchecked") + static <E> List<E> copyOf(Collection<? extends E> coll) { + if (coll instanceof ImmutableCollections.AbstractImmutableList) { + return (List<E>)coll; + } else { + return (List<E>)List.of(coll.toArray()); + } + } }
< prev index next >