下面小编就为大家带来一篇浅谈java中unmodifiableList方法的应用场景。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
首先举例描述问题:
Student.java
package com.liulei.test; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Created by Liulei on 2017/5/31. */ public class Student { private String name; private int age; private Listcourses; public Student(){ courses = new ArrayList (); } public Student(String name,int age,List courses){ this.name = name; this.age = age; this.courses = courses; } public List getCourses(){ return this.courses; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void describe(){ System.out.println(this.name); System.out.println(this.age); for (String course:courses){ System.out.println(course); } } }
App.java
package com.liulei.test; import java.util.ArrayList; import java.util.List; /** * Hello world! * */ public class App { public static void main( String[] args ) { ArrayListcourses = new ArrayList (); courses.add("Math"); courses.add("Chinese"); Student student = new Student("Alice",18,courses); student.describe(); List myCourses = student.getCourses(); myCourses.add("English"); student.describe(); } }
执行结果:
Alice
18
Math
Chinese
Alice
18
Math
Chinese
English
虽然只有getCourse,但依然可以被加上1门English。使用unmodifiableList可以解决这个问题,将Student的getCourses改写:
public ListgetCourses(){ return Collections.unmodifiableList(this.courses); }
再次执行,编译器提示出错:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
总结,使用unmodifiableList可以保证对象的list内容不被意料之外地修改,保证对象的封装性。
以上就是浅谈java中unmodifiableList方法的应用场景的详细内容,更多请关注0133技术站其它相关文章!