如何知道List.remove()是否"不支持"?

Ank*_*wal 5 java list unsupportedoperation

我有这个:

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

它给:

$ 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)
Run Code Online (Sandbox Code Playgroud)

问题:我理解为什么我会得到这个例外.这是因为正在使用ArrayList内部的类Arrays.java没有remove()方法.我的问题是,如果有人(任何用户,像我一样)在使用之前知道List他们收到的是什么,它不包含remove方法?

Joh*_*ica 8

没有办法知道.List<T>更改列表的所有方法都列为可选.子类可以实现或不实现它们.不幸的是,API不包含类似的方法isReadOnly(),因此无法检查这些方法是否会抛出异常而不调用它们.

只读列表的所有者有责任不将其传递给尝试更改它的方法.