`

关于UnsupportedOperationException异常

 
阅读更多

在使用collection框架编码时,会时常遇到UnsupportedOperationException异常。

List list1 = new ArrayList();
list1.add("test");
  
String[] array = new String[2];
List list2 = Arrays.asList(array);

List list3 = new ArrayList(list2);
list3.add("test");

array[0] = "test2";
System.out.println(list2.get(0));
list2.add("test");//抛出异常

在执行到list2.add("test")时抛出如下异常:

test2
Exception in thread "main" java.lang.UnsupportedOperationException
 at java.util.AbstractList.add(AbstractList.java:151)
 at java.util.AbstractList.add(AbstractList.java:89)
 at TesException.main(TesException.java:20)

上面代码中list1是用正常方式下创建的List,可以增删内容

而list2是一个固定大小的List,不可以对其进行进行修改操作,对array的任何操作,若想修改list3的内容,只能通过修改其对应的array。

 

另一种解释:

在使用Arrays.asList()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(),add()等,所以throw UnsupportedOperationException。

 

public abstract class AbstractList<E>extends AbstractCollection<E>implements List<E>

此类提供 List 接口的骨干实现,以最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作。对于连续的访问数据(如链表),应优先使用 AbstractSequentialList,而不是此类。 要实现不可修改的列表,编程人员只需扩展此类,并提供 get(int) 和 size() 方法的实现。 要实现可修改的列表,编程人员必须另外重写 set(int, E) 方法(否则将抛出 UnsupportedOperationException)。如果列表为可变大小,则编程人员必须另外重写 add(int, E) 和 remove(int) 方法。 按照 Collection 接口规范中的建议,编程人员通常应该提供一个 void(无参数)和 collection 构造方法。 与其他抽象 collection 实现不同,编程人员不必 提供迭代器实现;迭代器和列表迭代器由此类在以下“随机访问”方法上实现:get(int)、set(int, E)、add(int, E) 和 remove(int)。

分享到:
评论

相关推荐

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

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

    java 操作错误(UnsupportedOperationException)

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

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

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

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

    10. UnsupportedOperationException - 不支持的操作异常 11. EOFException - 文件已结束异常 12. FileNotFoundException - 文件未找到异常 13. SQLException - 操作数据库异常 14. IOException - 输入输出异常 15. ...

    Java常见异常收纳整合

    不支持的操作异常:`UnsupportedOperationException` 当某个方法或操作不被支持时,会抛出`UnsupportedOperationException`。这种异常通常出现在抽象类或接口实现中,某些方法被声明为不支持。 以上列举了Java开发...

    JAVA异常分类.txt

    - **UnsupportedOperationException**:方法调用不受支持。 ### 异常处理机制 Java提供了try-catch-finally语句来处理异常。try块用于封装可能抛出异常的代码段,catch块用于捕获并处理特定类型的异常,finally块...

    java异常分类

    10. **UnsupportedOperationException - 不支持的操作异常** 当某个方法未实现或者不支持某些操作时,会抛出此类异常。例如,如果你定义了一个不允许修改的集合类,但在该集合上尝试添加元素时,就可以抛出此异常...

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

    22. `UnsupportedOperationException`: 当不支持某操作时抛出,例如在不支持的集合上进行迭代。 23. `NumberFormatException`: 字符串转换为数字格式时格式错误抛出。 24. `NoSuchElementException`: 在集合或迭代器...

    软件开发中异常分析

    23. **UnsupportedOperationException** - 发生场景:请求的操作不支持时抛出。 - 解决方案:选择支持该操作的替代方法或类。 #### 异常分类 Java中的异常大致可以分为两类: 1. **Checked Exception**:编译期...

    JAVA程序员常见的面试题

    ### JAVA程序员常见的面试题解析 #### 一、final, finally, finalize 的区别 - **final**: 关键字“final”在 Java 中有多种用途。...- **UnsupportedOperationException**: 表示不支持的操作异常。

    总结了一下JAVA中常见的几种RuntimeException

    10. **`UnsupportedOperationException` - 不支持的操作异常** 当一个方法或操作在当前环境下不受支持时,会抛出此异常。这可能是由于子类重写了父类中的方法,并且子类不支持该方法的原始行为。 处理这些异常的...

    Java 基础常见知识点&amp;面试题总结(下),2022 最新版!.doc

    又称为运行时异常,包括`RuntimeException`及其子类,如`NullPointerException`、`IllegalArgumentException`、`NumberFormatException`、`ArrayIndexOutOfBoundsException`、`ClassCastException`、`Arithmetic...

    常用的RuntimeException.txt

    UnsupportedOperationException - 不支持的操作异常 当调用的方法在当前上下文中不被支持时抛出。例如,在只读集合上调用添加元素的方法。 ### 总结 以上列举了 Java 中常见的运行时异常及其含义,了解这些异常...

    java集合代码

    4. **`UnsupportedOperationException`**: 如果我们尝试对不可变的集合或不支持特定操作的集合执行某些操作(如`add()`或`remove()`),就会抛出这个异常。例如,尝试对由`Arrays.asList()`创建的固定大小的列表执行...

    阿里巴巴编码规范试题答案

    答案:在Java中,Arrays.asList方法的返回值是一个固定大小的列表,不能进行add、remove、clear操作,否则将抛出UnsupportedOperationException异常。 八、 阿里巴巴编码规范 阿里巴巴编码规范是阿里巴巴集团内部...

    阿里巴巴Java编码规范答案.docx

    对 于 转 换 过 来 的 集 合 , 它 的 add/remove/clear 方 法 会 抛 出 :UnsupportedOperationException(C)。Arrays.asList 体现的是适配器模式,只是转换接口,后台的数据仍是数组(D)。 9. 异常处理方式 在...

    笔记笔记笔记

    - `UnsupportedOperationException`:不支持的操作异常。 - **处理方式**: - 捕获异常:使用`try-catch`语句捕获异常并进行相应处理。 - 自定义异常:可以通过继承`RuntimeException`或`Exception`自定义异常类...

Global site tag (gtag.js) - Google Analytics