在Java SE 9 中创建不可变列表的工厂方法
Java 9 于 2017 年 3 月左右发布,在Java 9 中, Java语言中添加了一些特性,不可变 List 的工厂方法就是其中之一。
不可变列表的特点:
- 顾名思义,这些列表是不可变的。
- 如果尝试添加、删除和更新列表中的元素,我们将遇到 UnsupportedOperationException。
- 不可变列表也不允许空元素。
- 如果尝试使用 null 元素创建不可变列表,我们将遇到 NullPointerException。如果尝试在列表中添加空元素,我们将遇到 UnsupportedOperationException。
在Java 8 中创建不可变列表
在Java SE 8 中,为了在Java 8 中创建不可变列表,我们使用Java .util.Collections.unmodifiableList(List list) method.unmodifiableList(List list)。此方法返回指定列表的不可修改视图。此方法允许模块为用户提供对内部列表的“只读”访问权限。
Syntax: public static List unmodifiableList(List list)
Returns: an unmodifiable view of the specified list.
Exception: 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 gfg_empty = new ArrayList();
// making list immutable
List empty_immutable1
= Collections.unmodifiableList(gfg_empty);
// creating non-empty list
List gfg_non_empty = new ArrayList();
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 gfg_empty = new ArrayList();
// 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 gfg_non_empty = new ArrayList();
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("quiz.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 immutable = List.of();
// creating non-empty immutable list
List 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 immutable = List.of();
immutable.add(null);
// creating non-empty immutable list
List immutable1 = List.of("contribute", "ide");
immutable1.add("install jdk 9");
}
}
运行上述代码后,你一定已经获得了 UnsupportedOperationException。