陈建华的博客
专注web开发
at java.util.AbstractList.remove(AbstractList.java:144)
2015-09-10 21:10:47   阅读2014次

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

 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 ArrayList<String>(Arrays.asList(strs)).remove(0));
}

 




-----------------------------------------------------
转载请注明来源此处
原地址:#

-----网友评论----
暂无评论
-----发表评论----
微网聚博客乐园 ©2014 blog.mn886.net 鲁ICP备14012923号   网站导航