Java报错”UnsupportedOperationException”的原因以及解决办法

  • Post category:Java

“UnsupportedOperationException”表示不支持的操作异常,通常在调用某些不支持的操作时抛出。这个异常属于运行时异常,通常发生在代码执行期间。

Java中,一般情况下,当我们调用某些对象或接口的方法,但是该方法根本不支持或不可用时,就会抛出这个异常。

以下是几种可能会触发这个异常的场景:

  1. Java集合框架中的不可变集合

Java集合框架中的不可变集合是指在创建之后不能添加或删除元素的集合。在计算机科学中,这种集合也被称为持久集合或函数式集合。

但是,当使用不可变集合的时候,如果调用了add()或remove()等修改集合元素的方法,就会触发UnsupportedOperationException异常。

下面是一个示例代码,当我们使用Java中的不可变列表ImmutableList进行增删操作时,就会触发UnsupportedOperationException:

import com.google.common.collect.ImmutableList;

public class ImmutableListExample {
    public static void main(String[] args) {
        // 创建不可变列表
        ImmutableList<String> immutableList = ImmutableList.of("a", "b", "c");

        // 禁止增删操作
        immutableList.add("d");
    }
}

运行代码会触发如下异常:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:117)
    at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:111)

解决方法:

要解决这个问题,可以使用Java中的可变集合,如ArrayList、LinkedList、HashSet等。除此之外,如果需要在代码中使用不可变集合,那么不要调用它的修改方法,而是应该使用它的查询方法。

  1. Java中的枚举类型

在Java中,枚举是一种特殊的数据类型,它可以在程序中定义一组常量。当我们遍历枚举中的元素时,如果尝试修改或删除其中的一个元素,就会触发UnsupportedOperationException异常。

以下是一个示例代码,当我们尝试修改或删除枚举类型中的元素时,就会触发UnsupportedOperationException异常:

public enum Gender {
    MALE, FEMALE;
}

public class EnumExample {
    public static void main(String[] args) {
        // 输出所有的枚举元素
        for (Gender gender : Gender.values()) {
            System.out.println(gender);
        }

        // 尝试修改或删除元素
        Gender.MALE.toString();
        Gender.FEMALE.name();
    }
}

运行代码会触发如下异常:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.base/java.lang.Enum.toString(Enum.java:116)
    at com.example.EnumExample.main(EnumExample.java:12)

解决方法:

要解决这个问题,需要明确枚举类型中的元素是不可改变的,它们被定义为常量。因此,在编写代码时应该避免尝试修改或删除枚举类型中的元素。

总的来说,要避免UnsupportedOperationException异常,我们需要明确对象或接口的支持情况,并避免调用不支持的方法。通常来说,在调用某个对象或接口的方法时,我们应该先查看它的文档,了解它所支持的方法和操作,以避免这种异常的发生。