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

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值