读书人

【学到一招】种的集合的返回

发布时间: 2013-07-04 11:45:28 作者: rapoo

【学到一招】类的集合的返回。
Collections.unmodifiableList(List)方法的使用。
该方法会返回一个只读的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)。

读书人网 >其他相关

热点推荐