`
Before_Morning
  • 浏览: 36882 次
文章分类
社区版块
存档分类
最新评论

Arrays.asList()使用---导致java.lang.UnsupportedOperationException分析

 
阅读更多

最近在做项目的时候,遇到使用Arrays,asList()后出现java.lang.UnsupportedOperationException。

贴出代码为:

<pre name="code" class="java">public static CodOrderTemplate appendReturnDetailFields(
			CodOrderTemplate entity, String returnDetailsFieldIds) {
		String existIds = "";
		String realIds = "";
		if (entity != null) {
			existIds = entity.getTemplateFieldIds();
			if (existIds.length() > 0) {
				String[] filedsArray = existIds.split(",");
				String[] returnDetailFields = returnDetailsFieldIds.split(",");
				List<String> list1 = Arrays.asList(filedsArray);
				List<String> list2 = Arrays.asList(returnDetailFields);
				list1.removeAll(list2);

				for (String temps : list1) {
					realIds += temps + ",";
				}
				realIds += returnDetailsFieldIds;
				if (null != realIds && realIds.length() > 0) {
					entity.setTemplateFieldIds(realIds.substring(0, realIds
							.length() - 1));
				}
			}
		}
		return entity;
	}



出错的原因主要是因为背景色为灰色的三行代码,首先也不知道为何会出错,因为以前一直记得操作List的时候可能发生conCurrentModificationExcption,当时我就特意注意是不是这个原因,但是结果不是这样的。到网上查了一下,发现是因为Arrays.asList()返回值为:java.util.Arrays$ArrayList,而不是ArrayList。最后看了源码,才发现原来其中Arrays$ArrayList中抛出了java.lang.UnsupportedOperationException:


其中的原因似乎是有眉目了,其实,Arrays$ArrayList和ArrayList都继承自AbstractList,其中的remove(),add()等方法在AbstractList中是默认抛出上面的异常的并且不做任何处理。但是ArrayList重写了这些method来对list进行操作,对Arrays$ArrayList只是继承了方法也没有重写父类的方法,所以会抛出java.util.UnsupportedOperationException。

解决方法:

1.使用Iterator

2.将Arrays$ArrayList转为ArrayList

eg:List list = Arrays.asList(jjyy[]);

List realList = new ArrayList(list);

所以,上面贴出的代码改为:

<pre name="code" class="java">public static CodOrderTemplate appendReturnDetailFields(CodOrderTemplate entity, String returnDetailsFieldIds) {
		String existIds = "";
		String realIds = "";
		if (entity != null) {
			existIds = entity.getTemplateFieldIds();
			if (existIds.length() > 0) {
				String[] filedsArray = existIds.split(",");
				String[] returnDetailFields = returnDetailsFieldIds.split(",");
				List<String> list1 = new ArrayList<String>(Arrays.asList(filedsArray));
				List<String> list2 = new ArrayList<String>(Arrays.asList(returnDetailFields));
				list1.removeAll(list2);

				for (String temps : list1) {
					realIds += temps + ",";
				}
				realIds += returnDetailsFieldIds;
				if (null != realIds && realIds.length() > 0) {
					entity.setTemplateFieldIds(realIds.substring(0, realIds
							.length() - 1));
				}
			}
		}
		return entity;
	}




分享到:
评论

相关推荐

    Arrays.asList方法总结

    `Arrays.asList`方法是Java中一个非常实用的工具,它允许我们将数组转换为`List`对象,以便在处理数组时可以利用`List`接口提供的便利。然而,这个方法有一些特殊的特性和限制,需要我们理解清楚才能正确使用。下面...

    Java Arrays.asList使用方法解析

    "Java Arrays.asList使用方法解析" Java Arrays.asList使用方法解析是Java中一个非常重要的知识点,主要介绍了Arrays.asList的使用方法和原理。Arrays.asList方法的作用是将数组或一些元素转换为集合,但需要注意的...

    Java中Arrays.asList()方法详解及实例

    Java中Arrays.asList()方法详解及实例 Arrays.asList()方法是Java中一个常用的方法,它将数组转换为列表。该方法的签名为`public static &lt;T&gt; List&lt;T&gt; asList(T... a)`,它可以接受变长参数,通常情况下是一个数组...

    Java用Arrays.asList初始化ArrayList实例方法

    Java中使用Arrays.asList初始化ArrayList实例方法 在 Java 中,使用 Arrays.asList 方法可以快速创建一个 List 集合,但是需要注意的是,这个方法返回的 ArrayList 并不是 java.util.ArrayList 对象,而是一个内部...

    浅谈Arrays.asList() 和ArrayList类型区别

    在Java编程中,Arrays.asList()方法和ArrayList是两种不同的方式来处理列表数据,它们之间存在显著的区别。这篇文章将深入探讨这两个概念以及它们在实际使用中的差异。 首先,Arrays.asList()是一个Java内置方法,...

    java 源码分析Arrays.asList方法详解

    Java中的`Arrays.asList()`方法是Java集合框架的一部分,它允许我们将数组或变长参数转换为一个固定大小的`List`对象。这个方法在处理数组与集合之间的转换时非常有用,尤其是当你需要使用集合API操作数组时。下面...

    浅谈Arrays.asList()方法的使用

    在Java编程中,`Arrays.asList()`方法是一个非常实用的工具,它允许我们将数组转换成一个`List`对象。这个方法在处理数组与集合之间的转换时,提供了很大的便利。下面我们将深入探讨`Arrays.asList()`方法的使用细节...

    在项目中用了Arrays.asList、ArrayList的subList,被公开批评.html

    Arrays.asList、ArrayList的subList坑

    Protein.Arrays,.Biochips,.and.Proteomics.-.Joanna.S.Albala

    #### 蛋白质阵列(Protein Arrays) 蛋白质阵列是一种高通量技术,用于检测生物样本中的蛋白质种类及其相对丰度。这种技术通过将成千上万种不同的蛋白质固定在一个固体基质上(如玻璃片或尼龙膜),然后用标记的...

    Apress.PHP.Arrays.Single.Multi-dimensional.Associative.and.Object.Arrays.

    Apress.PHP.Arrays.Single.Multi-dimensional.Associative.and.Object.Arrays.in.PHP.7.1484225554.rar 最新书籍,精讲PHP数组,文字版PDF

    flyhero#MarkNote#用过Arrays.asList的注意了1

    而一开始asList()的设计时用于打印数组而设计的,但jdk1.5开始,有了另一个比较更方便的打印函数Arrays.toString(),于是打印不再使用as

    list使用过程中遇到的坑

    xception in thread "main" java.lang.UnsupportedOperationException Arrays.asList转化基本数据类型数组的时候有个意想不到的坑 当我们在实际业务开发过程中,难免会遇到数组转List的操作,通常我们所选择的就是...

    System.arraycopy和Arrays.copyOf

    `System.arraycopy` 和 `Arrays.copyOf` 都是Java中用于复制数组的方法,但它们在使用和处理异常情况上有所不同。这两个方法在处理数组复制时,提供了便利和效率,但各有其适用场景。 `System.arraycopy` 是一个...

    java随机生成字符串(字符随机生成类 生成随机字符组合).docx

    temp.addAll(Arrays.asList(lowercase)); } else if (type == TYPE.CAPITAL) { temp.addAll(Arrays.asList(capital)); } else if (type == TYPE.NUMBER) { temp.addAll(Arrays.asList(number)); } else if ...

    javax.servlet.jsp.jstl-1.2.zip

    List&lt;String&gt; list = Arrays.asList("Item1", "Item2", "Item3"); request.setAttribute("list", list); %&gt; ${list}"&gt; ${item} ``` 在这个例子中,`&lt;c:forEach&gt;`标签用于遍历集合,并通过EL表达式`${list}`...

    com.springsource.edu.emory.mathcs.backport-3.1.0.jar

    com.springsource.edu.emory.mathcs.backport-3.1.0.jar

    你清楚Arrays.binarySearch()方法的返回值吗?

    在Java编程语言中,`Arrays`类是Java.util包下的一个非常重要的工具类,它提供了大量用于操作数组的静态方法,其中包括我们今天要讨论的`binarySearch()`方法。`Arrays.binarySearch()`方法允许我们在有序数组中查找...

    JAVA基于Arrays.sort()实现数组升序和降序

    在 Java 中,排序数组是非常常见的操作之一,而 Java 提供了多种方式来实现数组的排序,其中一种常用的方法是使用 Arrays.sort() 方法。今天,我们将详细介绍如何使用 Arrays.sort() 方法来实现数组的升序和降序排序...

    isscc 2019 all

    SC2 - Scalable mm-Wave Phased Arrays .pdf SC3 - Challenges and Architectures.pdf SC4 - Emerging Topics in Phased Arrays and the Path to THz.pdf Session 01 - Plenary.pdf Session 02 - Processors....

Global site tag (gtag.js) - Google Analytics