`
ikon
  • 浏览: 109611 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于UnsupportedOperationException异常

    博客分类:
  • java
 
阅读更多

我们在使用collection框架code时,会时常遇到UnsupportedOperationException异常,有些人很不了解为什么抛出这个异常,会很郁闷,但是那些只知道code的代码工人不会想这些问题。下面我作一下解释,可能也不是很正确。

其实我们主要的疑惑可能是:java既然提供了这个方法,为什么我们调用要抛出异常,说不支持这个操作。我们先看一段代码:

  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");//抛出异常
在执行到l2.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,从上面这一点也是可以看出的(关于这些解释可以参看api文档)。那么为什么会这样呢,其实List结构按是否可修改也是可以在分为两个类型的,但是collection框架已经有太多的接口类型了,若在对每种接口类型都分出一个unmodifiable类型的接口,那么最后collection框架会更大,对于学习与使用都会需要记住更多的接口。所以我想这样做的关键一点是:统一接口,减少开发人员的负担。但是若文档中没有对这一点说清楚,有些喜欢刨根问题的程序员会很郁闷。

我猜测Arrays.asList返回的List内容是Array的内容引用。若可以在List中修改,那么怎么同步呢?因为它们有一个本质的区别Array不能自动增大,若允许在List随便增大,则与其相应的Array的内容怎么保证不可修改呢?他们之间有一个阻抗。最后权衡一下,只能让Arrays.asList返回的List不可修改,或者让返回的List与Array之间没有关系,若这样的话,对于那些很大数组来说性能上就会很有影响。

分享到:
评论

相关推荐

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

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

    UnsupportedOperationException(解决方案).md

    UnsupportedOperationException异常是Java编程语言中常见的运行时异常,它通常在调用一个不支持的方法时抛出。这种异常通常出现在使用Java集合框架时,尤其是当试图对只读集合进行修改操作时。例如,使用Arrays....

    UnsupportedOperationException.md

    首先,在Java集合框架中遇到UnsupportedOperationException异常时,通常是因为对一个不支持操作的集合进行了修改操作。例如,尝试向一个不可修改的列表(如ImmutableList)添加或删除元素时就会抛出此异常。处理这种...

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

    UnsupportedOperationException异常产生的原因,通常是因为我们在不可修改的集合对象上执行了添加、删除等操作。例如,在Java中,Arrays.asList()返回的列表是固定大小的,不允许添加或删除元素,尝试这样做就会抛出...

    UnsupportedOperationException解决办法.md

    在Java中解决UnsupportedOperationException异常的一种常见方法是通过创建一个新的可修改的集合,并将原始不可修改集合中的元素复制到新集合中,然后在新的集合上执行所需的操作。例如,当你从一个未修改的列表开始...

    UnsupportedOperationException如何解决.md

    在计算机编程中,`UnsupportedOperationException`是一种常见异常,它的出现通常意味着请求的操作当前环境中不被支持。该异常多出现在Java编程语言中,其作为一种运行时异常,表明了对象不支持某个方法调用。为应对...

    com.mcs51.exception.UnsupportedOperationException解决方案(亲测可用).md

    在开发中遇到UnsupportedOperationException异常时,首先应查明异常的具体原因。通常这个异常的出现是因为调用了某个对象不支持的操作。而开发者需要做的是找到并替换掉这些不支持的方法调用。然而,有时无法避免...

    java 操作错误(UnsupportedOperationException)

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

    com.avr.exception.UnsupportedOperationException解决方案(亲测可用).md

    很多集合类框架中的接口都有固定的实现约束,比如AbstractList的add和remove方法就总是抛出UnsupportedOperationException异常。 第三步,解决该问题通常需要在代码层面进行调整。如果开发者使用的是自定义类,可能...

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

    在软件开发过程中,我们经常会遇到各种异常情况,尤其是`com.avr.exception.UnsupportedOperationException`异常。这是一种运行时异常,通常发生在调用了一个不被支持的操作时。这种异常的出现往往是因为代码中存在...

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

    `UnsupportedOperationException`是在Java编程语言中常见的异常之一,它属于运行时异常,当调用的方法不支持请求的操作时会被抛出。尽管它通常用于标记类或接口不支持的操作,但在单片机与上位机交互过程中,也可能...

    java异常(pdf格式)

    - `UnsupportedOperationException`:不支持的操作异常。 2. **非运行时异常**: - `IOException`:输入输出异常。 - `FileNotFoundException`:文件未找到异常。 - `SQLException`:SQL异常。 - `...

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

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

Global site tag (gtag.js) - Google Analytics