Java 中是否有方法将 Set 转换为不可变对象

java 8object oriented programmingprogramming

当需要创建一个初始化后无法更改的对象时,可以定义一个不可变对象。创建不可变对象没有特定的规则,其目的是限制初始化后对类字段的访问。

Set 是集合框架中的一个接口,它不允许重复值。

将 Set 转换为不可变对象的方法

是的,Java 在 Collections 类中提供了一个名为 unmodifiableSet() 的方法。此方法接受一个集合对象作为参数,并返回其不可修改的,即不可变的形式。

示例

在下面的 Java 程序中,我们创建了一个 HashSet 对象,并使用 unmodifiableSet() 将其转换为不可变对象。

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ImmutableSet {
   public static void main(String args[]) {
      Set<Integer> hashSet = new HashSet<Integer>();
      //填充 HashSet
      hashSet.add(1124);
      hashSet.add(3654);
      hashSet.add(7854);
      hashSet.add(9945);
      System.out.println(hashSet);
      //将集合对象转换为不可变对象
      Set immutable = Collections.unmodifiableSet(hashSet);
   }
}

输出

[1124, 3654, 9945, 7854]

将集合对象转换为不可变对象后,如果尝试向其中添加元素,则会生成运行时异常 −

示例

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ImmutableSet {
   public static void main(String args[]) {
      Set<Integer> hashSet = new HashSet<Integer>();
      //填充 HashSet
      hashSet.add(1124);
      hashSet.add(3654);
      hashSet.add(7854);
      hashSet.add(9945);
      System.out.println(hashSet);
      //将集合对象转换为不可变对象
      Set immutable = Collections.unmodifiableSet(hashSet);
      //Adding elements to the immutable set
      immutable.add(4466);
   }
}

运行时异常

[1124, 3654, 9945, 7854]
Exception in thread "main" java.lang.UnsupportedOperationException
   at java.util.Collections$UnmodifiableCollection.add(Unknown Source)
   at MyPackage.ImmutableSet.main(ImmutableSet.java:19)

相关文章