<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Java 9 中的不可變集合和工廠方法 > 原文: [https://howtodoinjava.com/java9/create-immutable-collections-factory-methods/](https://howtodoinjava.com/java9/create-immutable-collections-factory-methods/) 學習使用新的[創建](//howtodoinjava.com/design-patterns/creational/implementing-factory-design-pattern-in-java/)**[不可變](//howtodoinjava.com/java/basics/how-to-make-a-java-class-immutable/)集合**,例如*不可變列表*,*不可變集*和*不可變映射* Java 9 中的工廠方法。 ```java Table of Contents Create Immutable List Create Immutable Set Create Immutable Map ``` ## 創建不可變列表 使用`List.of()`靜態工廠方法創建不可變列表。 它具有以下不同的重載版本: ```java static <E> List<E> of() static <E> List<E> of(E e1) static <E> List<E> of(E e1, E e2) static <E> List<E> of(E e1, E e2, E e3) static <E> List<E> of(E e1, E e2, E e3, E e4) static <E> List<E> of(E e1, E e2, E e3, E e4, E e5) static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6) static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7) static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) //varargs static <E> List<E> of(E... elements) ``` 這些方法創建的`List`實例具有以下特征: 1. 這些列表是不可變的。 不能在這些列表中添加,刪除或替換元素。 調用任何可變方法(即`add`,`addAll`,`clear`,`remove`,`removeAll`,`replaceAll`)將始終導致拋出`UnsupportedOperationException`。 2. 它們不允許`null`元素。 嘗試添加`null`元素將導致`NullPointerException`。 3. 如果所有元素都是可序列化的,它們可以[可序列化的](//howtodoinjava.com/java/serialization/a-mini-guide-for-implementing-serializable-interface-in-java/)。 4. 列表中元素的順序與提供的參數或提供的數組中的元素的順序相同。 讓我們看一些使用不可變列表的例子。 ```java package com.howtodoinjava; import java.util.List; public class ImmutableCollections { public static void main(String[] args) { List<String> names = List.of("Lokesh", "Amit", "John"); //Preserve the elements order System.out.println(names); //names.add("Brian"); //UnsupportedOperationException occured //java.lang.NullPointerException //List<String> names2 = List.of("Lokesh", "Amit", "John", null); } } Output: [Lokesh, Amit, John] ``` ## 創建不可變集 `Set`的行為與`List`非常相似,只是差異很小。 例如: 1. `Set`也不允許[重復元素](//howtodoinjava.com/puzzles/find-duplicate-elements-in-an-array/)。 傳遞的任何重復元素將導致`IllegalArgumentException`。 2. 集合元素的迭代順序未指定,可能會發生變化。 所有`Set`工廠方法都具有與`List`相同的簽名。 ```java static <E> Set<E> of() static <E> Set<E> of(E e1) static <E> Set<E> of(E e1, E e2) static <E> Set<E> of(E e1, E e2, E e3) static <E> Set<E> of(E e1, E e2, E e3, E e4) static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5) static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6) static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7) static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) //varargs static <E> Set<E> of(E... elements) ``` 我們來看幾個不可變集的例子。 ```java import java.util.Set; public class ImmutableCollections { public static void main(String[] args) { Set<String> names = Set.of("Lokesh", "Amit", "John"); //Elements order not fixed System.out.println(names); //names.add("Brian"); //UnsupportedOperationException occured //java.lang.NullPointerException //Set<String> names2 = Set.of("Lokesh", "Amit", "John", null); //java.lang.IllegalArgumentException //Set<String> names3 = Set.of("Lokesh", "Amit", "John", "Amit"); } } ``` ## 創建不可變映射 `Map`工廠方法與`List`或`Set`重載工廠方法相同。 唯一的區別是方法的簽名采用交替的鍵和值作為參數。 例如: ```java static <K,V> Map<K,V> of() static <K,V> Map<K,V> of(K k1, V v1) static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2) ... ... static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries) ``` Java 9 還提供了一種特殊的方法來創建 Map 條目實例。 ```java static <K,V> Map.Entry<K,V> entry?(K k, V v) ``` 讓我們舉一個在 Java 9 中創建不可變`Map`的示例。 ```java import java.util.Map; public class ImmutableCollections { public static void main(String[] args) { Map<String, String> names = Map.ofEntries( Map.entry("1", "Lokesh"), Map.entry("2", "Amit"), Map.entry("3", "Brian")); System.out.println(names); //UnsupportedOperationException //names.put("2", "Ravi"); } } Output: {1=Lokesh, 2=Amit, 3=Brian} ``` 顯然,在 Java 9 中創建不可變集合的新**工廠方法具有很高的可讀性和易用性**。 請在評論部分中將您對這些不可變集合的觀點放下。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看