java_lang_UnsupportedOperationException

问题分析

当请求了不支持的操作时抛出此类异常。这个异常有三个子类:

  1. HeadlessException, 在不支持键盘、显示器或鼠标的环境中调用与键盘、显示器或鼠标有关的代码时,被抛出的异常。

  2. ReadOnlyBufferException, 当在只读缓冲区上调用内容可变(content-mutation)的方法(例如put或compact方法)时,抛出此未经检查的异常。

  3. ReadOnlyFileSystemException,当试图更新一个关联了只读权限的文件的对象时抛出此类异常。

解决方案

当请求了不支持的操作时抛出此类异常,请根据堆栈信息检查相关代码,根据官方文档及状态图检查是否进行了不支持的操作。

示例一

  java.lang.UnsupportedOperationException
      java.util.AbstractList.add(UnknownSource)
      java.util.AbstractList.add(UnknownSource)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

问题分析:根据官方文档,asList()函数返回的List不支持结构调整,即不支持remove和add操作。

解决方案:可以创建一个新的List,将符合要求的List加入新的List对象中。

代码示例

  public void chooseObject(String[] array, String key){
        List<String> list=Arrays.asList(array);
        /* 错误的代码
        list.remove(0); */
        List<String> newList=new ArrayList<String>();
        for(String tmp:list){
          if(tmp.contains(key)){
            newList.add(tmp);
          }
        }
        System.out.println(newList.toString());
  }

参考文献