`
longgangbai
  • 浏览: 7339846 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java集合中部分异常java.lang.UnsupportedOperationException一个共同点

阅读更多

      在项目中采用一个枚举的集合,本人采用Collections中的空集合Collections.emptyList()在添加时发生异常:

常见集合如下:

private List<VacationCategory> vacationcategorys = Collections.emptyList();

 

 报错误如下:

-- Encapsulated exception ------------\
java.lang.UnsupportedOperationException
 at java.util.AbstractList.add(AbstractList.java:131)
 at java.util.AbstractList.add(AbstractList.java:91)
 at com.unutrip.callcenter.vacation.web.condition.VacationOrderConditionConvertor.setProductStyle(VacationOrderConditionConvertor.java:155)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
..............................

 

JDK API解释如下:

java.lang.CloneNotSupportedException

不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。

 

 

 

 

 

 

在网上查一下原因是因为部分集合类型一样但是缺少部分方法或不支持。

如特殊情况如下:

(1)常常使用Arrays.asLisvt()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于:

Arrays.asLisvt() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(int),add(int)等,所以throw UnsupportedOperationException。

解决方法是使用Iterator,或者转换为ArrayList

List list = Arrays.asList(a[]);
List arrayList 
= new ArrayList(list);

 

(2)

 

private List<VacationCategory> vacationcategorys = Collections.emptyList();

 

执行remove,add等method时,抛出此异常,本人将上述代码改为:

private List<VacationCategory> vacationcategorys = new ArrayList<VacationCategory>();

没有此错误,于是我查看一下源代码:

源码如下:

此类在Collections的类中:

 

 /**
     * The empty list (immutable).  This list is serializable.
     *
     * @see #emptyList()
     */
    public static final List EMPTY_LIST = new EmptyList();

 

    /**
     * Returns the empty list (immutable).  This list is serializable.
     *
     * <p>This example illustrates the type-safe way to obtain an empty list:
     * <pre>
     *     List&lt;String&gt; s = Collections.emptyList();
     * </pre>
     * Implementation note:  Implementations of this method need not
     * create a separate <tt>List</tt> object for each call.   Using this
     * method is likely to have comparable cost to using the like-named
     * field.  (Unlike this method, the field does not provide type safety.)
     *
     * @see #EMPTY_LIST
     * @since 1.5
     */
    public static final <T> List<T> emptyList() {
 return (List<T>) EMPTY_LIST;
    }

 

    /**
     * @serial include
     */
    private static class EmptyList
 extends AbstractList<Object>
 implements RandomAccess, Serializable {


 // use serialVersionUID from JDK 1.2.2 for interoperability
 private static final long serialVersionUID = 8842843931221139166L;

 

        public int size() {return 0;}

 

        public boolean contains(Object obj) {return false;}

 

        public Object get(int index) {
            throw new IndexOutOfBoundsException("Index: "+index);
        }

 

        // Preserves singleton property
        private Object readResolve() {
            return EMPTY_LIST;
        }


    }

EmptyList此集合竟然没有相应的add,remove等方法,哭了,呜呜...........

~~~~(>_<)~~~~

 

 

有上述几个实例看在集合中报此错的原因为缺少部分方法的原因或不支持造成的。

分享到:
评论

相关推荐

    java.lang.UnsupportedOperationException异常(csdn)————程序.pdf

    `java.lang.UnsupportedOperationException`是Java中的一个运行时异常,它属于`RuntimeException`的子类。这个异常通常在尝试调用一个不支持的操作时抛出。在Java编程中,某些方法可能在特定对象或特定条件下不支持...

    Android 兼容性问题:java.lang.UnsupportedOperationException解决办法

    java.lang.UnsupportedOperationException是在 Android 中一种常见的异常,该异常通常发生在视图inflate过程中。该异常的产生是由于 Android 系统无法将某些类型的数据转换为Dimension类型所致。 问题解决办法 对于...

    java.lang.UnsupportedOperationException(解决方案).md

    项目中碰到的,记录一下解决方案

    经典Java集合笔试选择题10道.doc

    C选项的`list.remove("java")`只会删除第一个匹配的"java",D选项的`list.removeAll("java")`会抛出`UnsupportedOperationException`,因为ArrayList不支持直接用字符串删除元素,需要传入一个集合。 3. **统计字符...

    java集合代码

    Java集合框架是Java编程语言中的一个核心特性,它提供了一组接口和类,用于存储和操作对象的集合。在这个主题中,我们将深入探讨ArrayList,这是一个常见的集合实现,以及与之相关的异常处理。 ArrayList是Java中`...

    java 操作错误(UnsupportedOperationException)

    在Java编程语言中,`UnsupportedOperationException` 是一个标准的运行时异常,通常在不支持特定操作的情况下抛出。这个错误通常表明某个方法被调用,但该方法在当前上下文中并未实现或者不适用。让我们深入了解一下...

    Java编程异常处理最佳实践【推荐】

    但是你在try里调用了一个或多个可能抛出异常的方法,或者自己抛出异常。这意味着可能无法到达try的末尾。因此,将清理资源的代码放入Finally中,或者使用Try-With-Resource语句。 2. 使用Try-With-Resource语句 ...

    Java集合类面试题.docx

    Java集合类是Java编程语言中不可或缺的一部分,它们用于存储、管理和操作对象。面试时,面试官经常通过提问关于集合类的问题来评估候选人的基础知识和实际经验。以下是一些常见的Java集合类面试题及其详细解答: 1....

    2JAVA编程高级-集合类.pdf

    在Java编程中,集合类是一个非常重要的概念,它主要用于存储和管理对象的集合。与数组相比,集合提供了更多的灵活性,例如动态调整大小的能力。Java集合框架由一系列接口和实现这些接口的类组成,位于`java.util`包...

    关于 Java Collections API 您不知道的 5 件事,第 1 部分

    在处理集合时,经常需要将一个集合的内容转移到另一个集合中,或者从一个较大的对象集中移除一个较小的对象集。此时,许多开发者可能会选择通过迭代的方式来添加或移除元素,但这并不是一个高效的方法。每次添加或...

    优质资料(2021-2022年收藏)史上最全的Java中所有Exception异常中英文对照.docx

    Java编程语言中,异常处理是程序健壮性的重要组成部分。异常是程序运行时遇到的问题,它们通常表示非正常情况或错误。Java提供了丰富的异常体系,包括标准的Java异常类和自定义异常。以下是一些主要的Java异常及其...

    Java 实例 - 只读集合源代码+详细指导教程.zip

    只读集合是Java编程中不可或缺的一部分,理解其工作原理对于编写健壮和安全的代码至关重要。详细指导将涵盖各种使用场景、最佳实践以及可能遇到的问题和解决方案,帮助你成为一名更优秀的Java开发者。

    Android webveiw 出现栈错误解决办法

    然而,有时在使用WebView时,可能会遇到一些错误,比如“java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes”。这个错误通常发生在尝试在一个具有高...

    java异常分类

    例如,如果你定义了一个不允许修改的集合类,但在该集合上尝试添加元素时,就可以抛出此异常。 #### 三、异常处理 在编写Java程序时,合理地处理异常是非常重要的。以下是一些常见的异常处理方式: 1. **捕获并...

    大公司最喜欢问的Java集合类面试题.zip

    在Java编程领域,集合类是面试中不可或缺的一部分,尤其对于大型公司来说,它们通常会深入探究候选人在集合类的理解和应用能力。Java集合框架是Java SE API中的核心部分,它提供了用于存储和操作对象的数据结构和...

    Java 实例 - 集合反转源代码-详细教程.zip

    在Java集合框架中,`Collections`工具类提供了一个`reverse()`方法,可以用来反转List类型的集合。例如,如果你有一个ArrayList或LinkedList,你可以直接调用`Collections.reverse(list)`来反转集合中的元素顺序。 ...

    com.avr.exception.UnsupportedOperationException(解决方案).md

    开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案

Global site tag (gtag.js) - Google Analytics