是否有任何方法可以将Set转换为Java中的不可变
每当需要创建在初始化后无法更改的对象时,都可以定义不可变对象。没有创建不可变对象的特定规则,其思想是在初始化后限制对类字段的访问。
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); //将元素添加到不可变集中 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)