Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 集合引发不需要的异常_Java_Collections_Java 8 - Fatal编程技术网

Java 集合引发不需要的异常

Java 集合引发不需要的异常,java,collections,java-8,Java,Collections,Java 8,从Collections.nCopies()规范: “返回一个不可变列表,该列表由指定 对象。” 所以从我的理解来看,它的迭代器必须抛出UnsupportedOperationException 但是,它的迭代器不会抛出UnsupportedOperationException,而是抛出IllegalStateException public class Main { public static void main(String args[]) throws Exception

Collections.nCopies()
规范:

“返回一个不可变列表,该列表由指定 对象。”

所以从我的理解来看,它的迭代器必须抛出
UnsupportedOperationException

但是,它的迭代器不会抛出
UnsupportedOperationException
,而是抛出
IllegalStateException

 public class Main {
        public static void main(String args[]) throws Exception {
            final List<String> c = Collections.nCopies(1, "copies");
            c.iterator().remove();
        }
    }
公共类主{
公共静态void main(字符串args[])引发异常{
最终列表c=集合.nCopies(1,“副本”);
c、 迭代器().remove();
}
}

为什么会这样?请帮助我理解此行为。

迭代器的异常文档。删除说明:

非法状态异常-如果尚未调用下一个方法,或 在上次调用后,已调用remove方法 下一种方法

这就是你的情况。在测试代码时,如果我先调用
next
,我会得到预期的
UnsupportedOperationException

final List<String> c = Collections.nCopies(1, "a");
Iterator<String> iterator = c.iterator();

iterator.next();
iterator.remove(); //java.lang.UnsupportedOperationException
final List c=Collections.nCopies(1,“a”);
迭代器迭代器=c.迭代器();
iterator.next();
iterator.remove()//java.lang.UnsupportedOperationException

但是如果我们不调用下一个方法呢first@11223那么也许迭代器不是您想要使用的<代码>迭代器。删除