`
longgangbai
  • 浏览: 7248612 次
  • 性别: 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异常(csdn)————程序

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

    主要介绍了Android 兼容性问题:java.lang.UnsupportedOperationException解决办法的相关资料,需要的朋友可以参考下

    Android webveiw 出现栈错误解决办法

    主要介绍了Android webveiw 出现栈错误解决办法的相关资料,出现java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes,这里提供解决办法,需要的朋友...

    java 操作错误(UnsupportedOperationException)

    java 操作错误(UnsupportedOperationException) java 操作错误(UnsupportedOperationException)

    prueba-javassist:用于动态代码插入的字节码级别的类操作测试

    测试javassist 用于动态代码插入的字节码级别的类操作测试虚拟机参数-agentlib:jdwp = ... 根据您运行的 JVM,可能会出现以下错误:线程“HotSwap”中的异常 java.lang.UnsupportedOperationException:未实现架构更改

    java 面试题 总结

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    1 ElasticSearch 安装

    ElasticSearch Linux系统安装教程

    list使用过程中遇到的坑

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

    JAVA面试题最全集

    一个“.java”原文件中是否可以包括多个类(不是内部类)? 53.掌握内部类和接口的概念 54.StringTokenizer类的使用 55.数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? ...

    环信移动客服DEMO无问题版

    &gt; com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.UnsupportedOperationException 解决这个问题

    Proguard v5.3.3.rar

    代码混淆的时候出现java.lang.UnsupportedOperationException: Unsupported class version number [52.0] (maximum 51.0, Java 1.7),原因是proguard.jar版本太低,需要5.0以上的版本

    MockDialogInterface.rar_All You Need

    A mock {@link android.content.DialogInterface} class. All methods are non-functional and throw {@link java.lang.UnsupportedOperationException}. Override it to provide the operations that you need.

    超级有影响力霸气的Java面试题大全文档

     Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    java范例开发大全(pdf&源码)

    实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 ...

    java范例开发大全源代码

     实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12 ...

    Java范例开发大全 (源程序)

     实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12  实例5...

    java范例开发大全

    实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 ...

    Java范例开发大全(全书源程序)

    实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑...

    odd-collection:一些集合的想法,用 Java 8 实现

    这个概念的后果是:putAll 方法,这是一个可选方法,抛出一个 UnsupportedOperationException,因为我不能保证给定 Map 的所有元素都会添加到 BijectiveMap。 有些可能会被压缩,并且不能保证如果您尝试放置具有 5 ...

Global site tag (gtag.js) - Google Analytics