5

私はこれを持っています:

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
public class ListTest {

    public static void main(String[] args) {


        String[] values = { "yes", "no"};
        List<String> aa = Arrays.asList(values);
        System.out.println(aa.getClass().getName());
        aa.remove(0);
    }

}

それは与えます:

$ java ListTest 
java.util.Arrays$ArrayList
Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(AbstractList.java:161)
    at ListTest.main(ListTest.java:12)

質問: この例外が発生する理由を理解しています。メソッドを持たない内部からのArrayListクラスが使用されているためです。私の質問は、メソッドが含まれていないことを受け取ったことを使用する前に、誰か (私のようなユーザー) をどのように知ることができますか?Arrays.javaremove()Listremove

4

5 に答える 5

8

知る方法はありません。List<T>リストを変更するすべてのメソッドは、オプションとしてリストされています。サブクラスはそれらを実装することも、しないこともできます。残念ながら、API には のようなメソッドが含まれていないisReadOnly()ため、これらのメソッドを呼び出さずに例外がスローされるかどうかを確認する方法はありません。

読み取り専用リストを変更しようとするメソッドに渡さないようにするのは、読み取り専用リストの所有者の責任です。

于 2014-09-26T05:50:11.830 に答える
0

Arrays.asListListのラッパーを返しますarray。このラッパーは固定サイズであり、 によって直接サポートされているarrayため、メソッドを変更することはできません。そうしないと、少なくともコンパイル時にエラーが発生しないため、それを知る方法がわからないことに注意してください。

配列からコレクションを取得して変更する場合は、使用できます

Collection c = new ArrayList(Arrays.asList(values));
于 2014-09-26T05:51:27.393 に答える