该方法会返回一个只读的List对象。
写个两个实例进行比较:
一般情况下构造bean类的方法:
public class Student { private String name; private List<String> courses; public String getName() { return name; } public void setName(String name) { this.name = name; } public void setCourse(List<String> courses) { this.courses = courses; } public List<course> getCourses() { returm this.courses; } } public TestMain() { public static void main() { Student stu = new Student(); List<String> courses = new ArrayList<String>(); courses.add("chinese"); course.add("english"); stu.setCourses(courses); stu.getCourse().add("math"); } } //以上的类在使用时会有一个问题,在客户类只要获得了一个ArrayList的引用后就可以随意的往对象中添加数据。而对象student并不知道。这和面向对象时想违背的。 public class Student { private String name; private List<String> courses; public String getName() { return name; } public void setName(String name) { this.name = name; } public void setCourse(List<String> courses) { this.courses = courses; } public List<course> getCourses() { return Collections.unModifiableList(this.courses); } public void addCourse(String course) { this.courses.add(course); } } public TestMain() { public static void main() { Student stu = new Student(); List<String> courses = new ArrayList<String>(); courses.add("chinese"); course.add("english"); stu.setCourses(courses); //下面的这条语句会抛异常。返回的是一个只读的List stu.getCourse().add("math"); //student类会提供一个方法来将数据加到课程列表中中去。 stu.addCourse("math"); } }
在《重构》中有提到夹封装结合(encapsulate Collections)。