Collections.unmodifiableList理解

unmodifiable 即只读的意思,不可以修改。
现在设计一个顾客信息的customer类,不好的写法如下:

package rr;
import java.util.ArrayList;
public class Try
{
    public static void main(String[] args)
    {
        ArrayList<String> list = new ArrayList<String>();
        Customer s = new Customer("Tom",list);
        list.add("1234");
        list.add("2234");
        ArrayList<String> list1 = s.getTelephone();
        list1.add("4566");
        System.out.println("the amount of Tom's telephone  = " + s.getCourses().size());
    }

    public static class Customer
    {
        private String name;
        private ArrayList<String> telephone;
        public Customer(String name, ArrayList<String> telephone)
        {
            this.name = name;
            this.telephone = telephone;
        }

        public ArrayList<String> getTelephone()
        {
            return telephone;
        }
        public void setCourses(ArrayList<String> telephone)
        {
            this.telephone = telephone;
        }
        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }    
    }
}

我们的本意是Tom这个顾客,他右两个电话,可是另一个列表list1居然也可以给Tom添加电话(其他的外部东西可以修改Tom信息)
测试结果

the amount of Tom's telephone  = 3

下边使用Collections.unmodifiableList

package rr;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class Try
{
public static void main(String[] args){
    ArrayList<String> list = new ArrayList<String>();
    Customer s = new Customer("Tom", list);
    list.add("1234");
    list.add("3455");    
    List<String> list1 = s.getPhone();

        /**
         * throws java.lang.UnsupportedOperationException
         * should replace with s.addCourse(String course)
         */
        list1.add("999"); 

        //报错
        System.out.println("the amount of phone number = " + s.getPhone().size());        
    }

    public static class Customer
    {
        private String name;
        private ArrayList<String> phone;

        public Customer(String name, ArrayList<String> a)
        {
            this.name = name;
            this.phone = a;
        }

        public List<String> getPhone()
        {
            return Collections.unmodifiableList(phone);//返回的是不可以修改的phone 数组
        }

        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }

        public void addPhone(String phone1)
        {
            phone.add(phone1);
        }

        public String removePhone(String phone1)
        {
            boolean removed = phone.remove(phone1);

     if (removed)
     {
         return phone1;
     }
     else
     {
                return null;
     }
        }
    }
}

插曲:
1、

List<String> list1 = s.getPhone();

报错:The type List is not generic; it cannot be parameterized with arguments 。(list不是泛型)
原因:包弄错,不是import java.awt.List;应该是

参考:http://hi.baidu.com/onejava/blog/item/10388f2b77d340fae6cd4091.html

猜你喜欢

转载自blog.csdn.net/leafdown_/article/details/79768362