当前位置: 首页 > news >正文

网站怎么修改好之后再上线游戏介绍网站模板下载地址

网站怎么修改好之后再上线,游戏介绍网站模板下载地址,免费学做网站,微信怎么弄小程序卖东西早上到公司,刚到工位,测试同事就跑来说"功能不行了,报服务器异常了,咋回事";我一脸蒙,早饭都顾不上吃,要来了测试账号复现了一下,然后仔细观察测试服务器日志,发现报了一个…

早上到公司,刚到工位,测试同事就跑来说"功能不行了,报服务器异常了,咋回事";我一脸蒙,早饭都顾不上吃,要来了测试账号复现了一下,然后仔细观察测试服务器日志,发现报了一个java.lang.UnsupportedOperationException异常
在这里插入图片描述
经排查发现,是将一个枚举类中两个元素,用Arrays.asList生成一个List集合,并且将这个集合当作一个方法的参数传递,在该方法中,正好使用此List进行了add方法的操作,导致异常发生了

Arrays.asList

使用此方式生成的List集合为什么不能执行add方法 ? 先来看下源码

 @SafeVarargs@SuppressWarnings("varargs")public static <T> List<T> asList(T... a) {return new ArrayList<>(a);  // ArrayList 是静态内部类}/*** @serial include*/
private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable
{private static final long serialVersionUID = -2764017481108945198L;private final E[] a;  //被final修饰,不可变ArrayList(E[] array) {a = Objects.requireNonNull(array);}@Overridepublic int size() {return a.length;}
.......... 省略,可自行去看源码....
}

从源码可见,Arrays.asList 实际上也是new了一个 ArrayList,但是此处的ArrayList是Arrays这个类中的静态内部类,该内部类中的变量a 是被final修饰,说明变量a是不可变的,数据不可被修改

   /*** {@inheritDoc}** <p>This implementation always throws an* {@code UnsupportedOperationException}.** @throws UnsupportedOperationException {@inheritDoc}* @throws ClassCastException            {@inheritDoc}* @throws NullPointerException          {@inheritDoc}* @throws IllegalArgumentException      {@inheritDoc}* @throws IndexOutOfBoundsException     {@inheritDoc}*/public void add(int index, E element) {throw new UnsupportedOperationException();}

其次,内部类ArrayList中并没有add的方法,而是使用了继承类AbstractList中add方法,该方法没有被重写,所以直接就抛了UnsupportedOperationException异常,正好对应上了

直接使用new

 List<String> list= new ArrayList<>();list.add("王五");

首先该ArrayList 是包java.util 下的类,虽然也继承了抽象类AbstractList,但是重写了抽象类AbstractList中的add方法

/*** Appends the specified element to the end of this list.** @param e element to be appended to this list* @return <tt>true</tt> (as specified by {@link Collection#add})*/public boolean add(E e) {ensureCapacityInternal(size + 1);  // Increments modCount!!elementData[size++] = e;return true;}

正是因为重写了add方法,所以才没有使用抽象类AbstractList中抛异常的add方法

如何使用Arrays.asList创建的List可以正常执行add操作?

上面分析了原因,因为Arrays中的静态内部类ArrayList未重写add方法,如果执行的add方法是重写后的,是否就可以解决? 可以将代码优化成下面的方式

List<String> list1 = Arrays.asList("张三", "李四");
try {list1.add("王五"); } catch (UnsupportedOperationException e) {System.out.println("oh, 报错了=" + e.toString());}//改良方式List<String> list2 = new ArrayList<>(Arrays.asList("张三", "李四"));list2.add("王五");System.out.println("正常执行=" + list2);

执行效果
在这里插入图片描述

http://www.yayakq.cn/news/561514/

相关文章:

  • asp网站源码安装流程做中英文网站公司
  • 个人网站被黑了网站规划建设心得与体会
  • 镇平做网站北京海淀月嫂家政公司
  • 如何查网站域名备案信息做网站用什么空间
  • y2学年做的租房网站黑龙江省住房和城乡建设厅
  • wordpress花园网站网站建设项目经验
  • 郑州网站建设开拓者电商网站做互联网金融
  • 怎么建设网站手机网站制作价格东莞网站建设设计
  • 网站建设推广群沧州建设银行招聘网站
  • 龙岗网络营销网站制作哪里好网站没有流量
  • html网站欣赏泉州建站服务
  • 晋中建设集团有限公司网站网站诊断书
  • 个人如何在企业网站做实名认证有哪些互联网公司
  • 怎样做中考成绩查询网站建设银行网站图片大全
  • 宠物托运网站开发长沙网站seo技术
  • 向客户介绍网站建设的话本扮家家室内设计平台
  • 多语种网站建设公司合肥网站建设方案
  • 网站移动端流量双井网站建设
  • 建设图书馆网站开发公司质量管理制度体系的情况说明
  • idea网站开发公司视频宣传片拍摄
  • 手机应用软件开发盐城seo网站优化软件
  • 蒙牛网站建设pc网站案例
  • 有关网站开发的参考文献萝岗免费网站建设
  • 谷歌网站地图在线生成电商财务内账做账流程
  • 网站用的服务器网站建设 jz.woonl
  • 京东优惠券网站怎么做中国建筑工程门户商城
  • 西安哪里有做网站的百度商桥怎样绑定网站
  • 一个网站制作流程网络营销课程建议
  • 如何让百度搜到自己的网站南京外贸网站建设怎么收费
  • 做版权保护的网站潍坊建设厅官方网站