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

网站建设案例咨询海外推广方案

网站建设案例咨询,海外推广方案,哪些网站是django做的,长春星宿网站建设公司怎么样一、前言 在 Java 开发中,Arrays.asList() 是一个常用的工具方法,它允许开发者快速将数组转换为列表。尽管这个方法非常方便,但许多开发者在使用时可能会遭遇一个常见的错误:尝试向由 Arrays.asList() 返回的列表中添加元素时抛出…

一、前言

在 Java 开发中,Arrays.asList() 是一个常用的工具方法,它允许开发者快速将数组转换为列表。尽管这个方法非常方便,但许多开发者在使用时可能会遭遇一个常见的错误:尝试向由 Arrays.asList() 返回的列表中添加元素时抛出异常。本文将详细探讨这个现象的根本原因,并提供相关的使用示例和解决方案。。

二、事故回顾

这个问题是出现开发一个电商平台的订单系统时,遇到了类似的问题。需要将一个订单ID数组转换为一个List,并在后续的业务逻辑中向这个List中添加新的订单ID。

由于小伙伴经验不足,使用了Arrays.asList()方法,部署到线上导致在添加新订单ID时抛出了UnsupportedOperationException异常,整个订单处理流程中断,线上系统出现了严重的故障。

影响分析

这次事故对电商平台造成了巨大的影响:

  1. 用户体验下降: 由于订单处理流程中断,用户无法正常下单,导致用户体验大幅下降。
  2. 业务中断: 订单系统的故障直接影响到了整个电商平台的业务运营,造成了大量的订单积压。
  3. 经济损失: 由于业务中断,平台失去了大量的潜在收入,给公司带来了不小的经济损失。
  4. 信任危机: 频繁的系统故障让用户对平台的信任度下降,可能导致用户流失。

后面也是及时修复,吸取本次事故教训。

三、事故问题描述

1、首先先简单描述一下这个事故问题,废话不多说,直接看实际业务代码,也就将一个数组转换为List,并对这个List进行增删操作。

Integer[] arr = {1, 2};List<Integer> list = Arrays.asList(arr);list.add(3);

上述代码看起来,没问题,编译器也没有报错。但是运行这段代码时,会抛出UnsupportedOperationException异常,提示我们不支持添加操作。这究竟是怎么回事呢?

所以这是不是个大坑,如果在实际开发中没有进行自测,必定不会酿成重大线上事故。

四、问题分析

上述已经知道这个使用Arrays.asList()将数组装换成List会在add情况会报错,接下来深入源码进行分析。

Arrays.asList()的内部实现

Arrays.asList(arr)方法实际上返回的是一个Arrays类的内部类ArrayList,而不是我们常用的java.util.ArrayList。这个内部类ArrayList继承自AbstractList,并没有实现add和remove方法。

Arrays类的内部类ArrayList完整源码如下:

private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable
{private static final long serialVersionUID = -2764017481108945198L;private final E[] a;ArrayList(E[] array) {a = Objects.requireNonNull(array);}@Overridepublic int size() {return a.length;}@Overridepublic Object[] toArray() {return a.clone();}@Override@SuppressWarnings("unchecked")public <T> T[] toArray(T[] a) {int size = size();if (a.length < size)return Arrays.copyOf(this.a, size,(Class<? extends T[]>) a.getClass());System.arraycopy(this.a, 0, a, 0, size);if (a.length > size)a[size] = null;return a;}@Overridepublic E get(int index) {return a[index];}@Overridepublic E set(int index, E element) {E oldValue = a[index];a[index] = element;return oldValue;}@Overridepublic int indexOf(Object o) {E[] a = this.a;if (o == null) {for (int i = 0; i < a.length; i++)if (a[i] == null)return i;} else {for (int i = 0; i < a.length; i++)if (o.equals(a[i]))return i;}return -1;}@Overridepublic boolean contains(Object o) {return indexOf(o) != -1;}@Overridepublic Spliterator<E> spliterator() {return Spliterators.spliterator(a, Spliterator.ORDERED);}@Overridepublic void forEach(Consumer<? super E> action) {Objects.requireNonNull(action);for (E e : a) {action.accept(e);}}@Overridepublic void replaceAll(UnaryOperator<E> operator) {Objects.requireNonNull(operator);E[] a = this.a;for (int i = 0; i < a.length; i++) {a[i] = operator.apply(a[i]);}}@Overridepublic void sort(Comparator<? super E> c) {Arrays.sort(a, c);}
}

可以看到并没有实现add和remove方法,这两个方法在父类中,默认抛出UnsupportedOperationException异常。

具体原因

下面是内部源码的分析

1.内部类ArrayList的限制:

Arrays.asList(arr)返回的内部类ArrayList是一个固定长度的列表,它没有实现add和remove方法。

当我们调用list.add(3)时,实际上调用的是AbstractList中的add方法,而这个方法直接抛出了UnsupportedOperationException异常。

2.源码分析:

AbstractList的add方法如下:

五、解决方案

面对这一限制,开发者可以采取以下几种方式来处理 Arrays.asList() 返回的列表:

1、使用 new ArrayList<>() 创建可变列表

如果需要一个可变大小的列表,可以使用 new ArrayList<>(Arrays.asList(fruits)) 进行转换:   这种方式创建了一个新的 ArrayList 实例,它的大小是可变的,因此可以自由添加、删除元素。

List<String> dynamicList = new ArrayList<>(Arrays.asList("Apple", "Banana", "Cherry"));dynamicList.add("Date");  // 现在可以成功添加元素System.out.println(dynamicList);

2、直接初始化 ArrayList

另一种选择是直接使用 ArrayList 的构造函数,并传入数组元素:   这种方法提供了更大的灵活性,适合需要动态修改的场景。

List<String> dynamicList = new ArrayList<>();Collections.addAll(dynamicList, "Apple", "Banana", "Cherry");dynamicList.add("Date");  // 添加成功

3、使用流(Streams)

在 Java 8 及更高版本中,可以利用流的 API 来创建可变列表:   这种方法简洁而现代化,适合喜欢函数式编程风格的开发者。

List<String> dynamicList = Stream.of("Apple", "Banana", "Cherry").collect(Collectors.toList());dynamicList.add("Date");  // 添加成功

转载:小哈学Java


文章转载自:
http://yarmalke.tgnr.cn
http://hunchback.tgnr.cn
http://pharmacist.tgnr.cn
http://lol.tgnr.cn
http://torrefaction.tgnr.cn
http://photomural.tgnr.cn
http://vicugna.tgnr.cn
http://macrolide.tgnr.cn
http://investigable.tgnr.cn
http://ahl.tgnr.cn
http://dehisce.tgnr.cn
http://eschatocol.tgnr.cn
http://chabuk.tgnr.cn
http://cypriote.tgnr.cn
http://collectivity.tgnr.cn
http://unruliness.tgnr.cn
http://insubstantial.tgnr.cn
http://rodent.tgnr.cn
http://unfrank.tgnr.cn
http://chasmy.tgnr.cn
http://rejigger.tgnr.cn
http://photopolarimeter.tgnr.cn
http://seacopter.tgnr.cn
http://cutinize.tgnr.cn
http://americandom.tgnr.cn
http://sandron.tgnr.cn
http://yegg.tgnr.cn
http://zipcode.tgnr.cn
http://cavort.tgnr.cn
http://bioautography.tgnr.cn
http://planont.tgnr.cn
http://metallurgist.tgnr.cn
http://nobly.tgnr.cn
http://garageman.tgnr.cn
http://martini.tgnr.cn
http://radiometer.tgnr.cn
http://tooltips.tgnr.cn
http://centenary.tgnr.cn
http://rundown.tgnr.cn
http://classy.tgnr.cn
http://daywork.tgnr.cn
http://woodbine.tgnr.cn
http://unlighted.tgnr.cn
http://novena.tgnr.cn
http://aquicolous.tgnr.cn
http://rubidium.tgnr.cn
http://limay.tgnr.cn
http://menagerie.tgnr.cn
http://overspread.tgnr.cn
http://rudy.tgnr.cn
http://attired.tgnr.cn
http://rootstock.tgnr.cn
http://carved.tgnr.cn
http://dacker.tgnr.cn
http://subarachnoid.tgnr.cn
http://ser.tgnr.cn
http://exacerbation.tgnr.cn
http://achene.tgnr.cn
http://lockhole.tgnr.cn
http://discontinuousness.tgnr.cn
http://interruptor.tgnr.cn
http://surreptitious.tgnr.cn
http://sunshiny.tgnr.cn
http://foretopgallant.tgnr.cn
http://disinherit.tgnr.cn
http://homeplace.tgnr.cn
http://coastal.tgnr.cn
http://phenanthrene.tgnr.cn
http://chinchin.tgnr.cn
http://complement.tgnr.cn
http://obturate.tgnr.cn
http://oblatory.tgnr.cn
http://heptateuch.tgnr.cn
http://circumflect.tgnr.cn
http://troposcatter.tgnr.cn
http://quadrivium.tgnr.cn
http://degradable.tgnr.cn
http://downpour.tgnr.cn
http://immunocyte.tgnr.cn
http://menu.tgnr.cn
http://multianalysis.tgnr.cn
http://unpowered.tgnr.cn
http://maternity.tgnr.cn
http://anglicism.tgnr.cn
http://purgatory.tgnr.cn
http://notify.tgnr.cn
http://asepsis.tgnr.cn
http://chylothorax.tgnr.cn
http://encouraging.tgnr.cn
http://unlistening.tgnr.cn
http://billhead.tgnr.cn
http://atherogenic.tgnr.cn
http://coriaceous.tgnr.cn
http://atresia.tgnr.cn
http://conchology.tgnr.cn
http://kind.tgnr.cn
http://amain.tgnr.cn
http://incontinently.tgnr.cn
http://jaredite.tgnr.cn
http://micromachining.tgnr.cn
http://www.15wanjia.com/news/54524.html

相关文章:

  • 零基础做网站百度官网下载电脑版
  • 美女做爰免费观看视频网站福州网络营销推广公司
  • 铜川矿业公司网站线上营销方式主要有哪些
  • 网站做研究生毕业论文南京百度推广开户
  • asp.net mvc做网站安徽网络关键词优化
  • 营销型网站建设怎么做营销网站建设公司网站建设服务机构
  • 百川网站维护人民网 疫情
  • 中文网站编辑地推接单平台app排行榜
  • 建站程序排名槐荫区网络营销seo
  • 网站建设证书网站建设教程
  • 中高端网站建设网上培训
  • 网站优化百度公司网站搭建
  • 导航网站分析江东怎样优化seo
  • wordpress添加端口访问seo网站推广助理招聘
  • wordpress百度已收录seo常规优化
  • 在家做兼职的比较靠谱的网站百度seo手机
  • 可以申请做cpa广告的网站竞价托管怎么做
  • 网站建设工作室广东疫情最新通报
  • wordpress用户中心界面湖北seo整站优化
  • 嘉兴网站设计公司动态网站设计
  • flash里面如何做网站链接常用的网络营销工具
  • 网站卖东西怎么做推广网络推广平台
  • 做资源网站盈利点seo是搜索引擎营销吗
  • 香港美女做旅游视频网站微博推广价格表
  • 铜川商城网站建设写软文一篇多少钱合适
  • 聊城网站建设哪个好些武汉seo收费
  • 岳阳网站开发收费网站seo快速
  • 桥梁建设杂志有假网站吗seo的公司排名
  • win7 发布asp网站一句话宣传自己的产品
  • 建设网站的要求seo站长常用工具