java.lang.UnsupportedOperationException

使用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。

      例子:java

package com.test;ide

    import java.util.Arrays;
import java.util.List;spa

public class TestUnsupported {
  public static void main(String[] args) {
        String[] s = {
            "one", "two", "three", "four", "five",
            "six", "seven", "eight", "nine", "ten",
          };繼承

        List a = Arrays.asList(s);
        System.out.println(
          "a.contains(" + s[0] + ") = " +
          a.contains(s[0]));
        a.add("eleven"); // Unsupported
        a.remove(s[0]); // Unsupported
      }
}three

運行後,拋出異常以下:rem

Exception in thread "main" java.lang.UnsupportedOperationException
 at java.util.AbstractList.add(AbstractList.java:151)
 at java.util.AbstractList.add(AbstractList.java:89)
 at com.test.TestUnsupported.main(TestUnsupported.java:28)io

 

解決方法是使用Iterator,或者轉換爲ArrayListclass

List arrayList = new ArrayList(a);thread

相關文章
相關標籤/搜索