Java 9 用工厂方法创建Immutable Set

Java 9 用工厂方法创建Immutable Set

Java 9是在2017年3月左右发布的,请安装jdk 9,这对理解本文中使用的代码会有帮助。在Java 9中,Java语言中增加了一些功能,不可变集的工厂方法就是其中之一。

所以让我们开始吧!

不可变集的特点

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

在java 8中创建不可变的集合

在java 8中,我们使用java.util.Collections.unmodifiableSet(Set set)方法来创建不可变的集合。这个方法返回一个指定集合的不可修改的视图。这个方法允许模块为用户提供对内部集合的 “只读 “访问。

语法: ** public static Set unmodifiableSet(Set set)
**返回值:
一个指定集合的不可修改的视图。
Exception: NA

java 8中不可变的空和非空集合的Java代码。

// Java code illustrating immutable set in java 8
import java.util.*;
class GfG
{
    public static void main(String args[])
    {
        // creating empty set
        Set<String> s1 = new HashSet<String>();
        Set<String> us1 = Collections.unmodifiableSet(s1);
          
        // creating non-empty set
        Set<String> s2 = new HashSet<String>();
        s2.add("contribute.geeksforgeeks.org");
        Set us2 = Collections.unmodifiableSet(s2);
          
        System.out.println(us1);
        System.out.println(us2);
    }
}

输出:

[]
[contribute.geeksforgeeks.org]

现在让我们试着在这些不可变的集合中添加元素。

// Java code illustrating immutable set in java 8
import java.util.*;
  
class GfG
{
    public static void main(String args[])
    {
        // creating empty set and unmodifiable set
        HashSet<String> s1 = new HashSet<String>();
        Set<String> us1  = Collections.unmodifiableSet(s1);
           
        // creating non-empty set and unmodifiable set
        HashSet<String> s2 = new HashSet<String>();
        s2.add("contribute.geeksforgeeks.org");
        Set<String> us2 = Collections.unmodifiableSet(s2);
           
        // try adding new element
        us1.add("gfg");
        us2.add("ide.geeksforgeeks");
    }
}

上面的代码会产生异常,因为我们正试图在不可变的集合中添加元素。

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

在java 9中创建不可变的集合

为了在java 9中创建不可变的集合,我们使用 of() 方法。

Java代码,在java 9中创建不可变的集合。

// Java code illustrating of() method
import java.util.Set;
  
class GfG
{
    public static void main(String args[])
    {
        // empty immutable set
        Set<String> is1 = Set.of("ide", "code", "practice");
          
        System.out.println(is1);
    }
}

输出:

[ide.code.practice]

现在让我们试着在这些不可变的集合中添加元素。

// Java code illustrating of() method
import java.util.*;
  
import com.google.common.collect.ImmutableSet;
class GfG
{
    public static void main(String args[])
    {
        // empty immutable set
        Set<>String is1 = Set.of();
            
        // non-empty immuttable set
        Set<String> is2 = Set.of("ide", "contribute", "support");
            
        // Adding an element throws exception
        is1.add(null);
        is2.add("set");             
    }
}
Exception in thread "main" java.lang.UnsupportedOperationException
    at com.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:218)
    at ImmutableListDemo.main(Main.java:16)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程