【学到一招】类的集合的返回。

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)。

猜你喜欢

转载自limitlee.iteye.com/blog/1895715