Java SE 9 创建Immutable List的工厂方法

Java SE 9 创建Immutable List的工厂方法

Java 9于2017年3月左右发布,在Java 9中,有一些功能被添加到Java语言中,而不可变列表的工厂方法就是其中之一。

不可变列表的特点

  1. 顾名思义,这些列表是不可变的。
  2. 如果试图在列表中添加、删除和更新元素,就会出现 UnsupportedOperationException。
  3. 不可变的列表也不允许出现空元素。
  4. 如果试图用空元素创建一个不可变的列表,我们会出现NullPointerException。如果试图在列表中添加空元素,我们将产生 UnsupportedOperationException。

在Java 8中创建不可变的列表

在Java SE 8中,为了创建不可更改的列表,我们使用java.util.Collections.unmodifiableList(List list) method.unmodifiableList(List list) 。这个方法返回一个指定列表的不可修改的视图。这个方法允许模块为用户提供对内部列表的 “只读 “访问。

语法:public static List unmodifiableList(List list)
返回:一个指定列表的不可修改的视图。
异常: NA

java 8中不可变的空和非空列表的Java代码。

// Java code illustrating
// creating of an 
// immutable list in Java 8
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class ImmutableListDemo
{
    public static void main(String args[])
    {
        // creating empty list
        List<String> gfg_empty = new ArrayList<String>();
          
        // making list immutable
        List empty_immutable1 
                = Collections.unmodifiableList(gfg_empty);
          
        // creating non-empty list
        List<String> gfg_non_empty = new ArrayList<String>();
  
        gfg_non_empty.add("write.geeksforgeeks.org");
        gfg_non_empty.add("www.geeksforgeeks.org");
          
        // making list immutable
        List empty_immutable2 
                = Collections.unmodifiableList(gfg_non_empty);
          
        System.out.println(empty_immutable1);
        System.out.println(empty_immutable2); 
    }
}

输出:

[]
[write.geeksforgeeks.org, www.geeksforgeeks.org]

现在让我们试着在不可变的列表中添加元素

// Java code illustrating
// an add operation 
// in immutable list in Java 8
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class ImmutableListDemo
{
    public static void main(String args[])
    {
        // creating empty list
        List<String> gfg_empty = new ArrayList<String>();
          
        // making list immutable
        List empty_immutable1 
                    = Collections.unmodifiableList(gfg_empty);
          
        // adding element in gfg_empty list
        empty_immutable1.add("ide.geeksforgeeks.org");
          
        // creating non-empty list
        List<String> gfg_non_empty = new ArrayList<String>();
  
        gfg_non_empty.add("write.geeksforgeeks.org");
        gfg_non_empty.add("www.geeksforgeeks.org");
          
        // making list immutable
        List empty_immutable2 
                    = Collections.unmodifiableList(gfg_non_empty);
          
        // adding element in gfg_non_empty list
        empty_immutable2.add("www.geeksforgeeks.org");
          
          
    }
}

例外。

Runtime Error : Exception in thread "main" 
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
at ImmutableListDemo.main(File.java:15)

在Java 9中创建不可变的列表

Java SE 9在List接口中引入了一些方法来创建不可变的列表。为了在Java 9中创建不可变的列表,我们使用 of() 方法。
,在Java 9中创建不可变的列表的Java代码。

// Java code illustrating
// creating immutable list
// using  of() method
import java.util.*;
class ImmutableListDemo
{
    public static void main(String args[])
    {
        // creating empty immutable list
        List<String> immutable = List.of();
           
        // creating non-empty immutable list
        List<String> immutable1 = List.of("contribute", "ide");
           
        System.out.println("empty immutable list: " + immutable);
        System.out.println("non-empty immutable list: " + immutable);
             
    }
}

输出:

empty immutable list: []
non-empty immutable list: [contribute, ide]

让我们试着在不可更改的列表中添加一些元素。

// Java code illustrating add 
// operation on immutable list
import java.util.*;
class ImmutableListDemo
{
    public static void main(String args[])
    {
        // creating empty immutable list
        List<String> immutable = List.of();
        immutable.add(null);
           
        // creating non-empty immutable list
        List<String> immutable1 = List.of("contribute", "ide");
        immutable1.add("install jdk 9");
           
    }
}

运行上述代码后,你一定会得到UnsupportedOperationException。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程