编码中的点点滴滴(1):慎用Arrays.asList函数

试运行如下代码,你猜会出现什么情况。

  public static void main(String[] args){
        String[] strs={"1","2","3","4"};
        System.out.println(Arrays.asList(strs).remove(0));
    }

如果没有没错,你一般会说是:1。但是实际上返回的是:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(AbstractList.java:144)
    at com.lmax.disruptor.YieldingWaitStrategy.main(YieldingWaitStrategy.java:126)

 

为什么会出现这种情况?因为我们认为JDK会返回一个ArrayList或者LinkedList,所直接调用remove(int index)方法。实际上asList返回的时什么呢?asList返回的是Arrays类内部自定义的AbstractList的子类,它没有实现remove方法。

如何避免这种情况发生呢?

 public static void main(String[] args){
        String[] strs={"1","2","3","4"};
        System.out.println(new LinkedList<String>(Arrays.asList(strs)).remove(0));
    }

 

posted on 2012-07-24 21:50  small.ming  阅读(1418)  评论(0编辑  收藏  举报

导航