这是已知问题吗?我无法找到任何搜索结果。ServiceLoader双迭代器问题
当迭代已经进行时迭代ServiceLoader时,第一次迭代将被中止。例如,假设有的Foo
至少两个实施方式中,以下代码将失败,一个AssertionError:
ServiceLoader<Foo> loader = ServiceLoader.load(Foo.class);
Iterator<Foo> iter1 = loader.iterator();
iter1.next();
Iterator<Foo> iter2 = loader.iterator();
while (iter2.hasNext()) {
iter2.next();
}
assert iter1.hasNext();
这似乎只发生,如果第二迭代器确实终止。该代码将成功在此变化中,例如:
ServiceLoader<Foo> loader = ServiceLoader.load(Foo.class);
Iterator<Foo> iter1 = loader.iterator();
iter1.next();
Iterator<Foo> iter2 = loader.iterator();
iter2.next();
assert iter1.hasNext();
这是一个错误还是一个功能? :p
这是否有票已经在任何地方?
您是否尝试过搜索错误数据库? – 2010-04-07 15:44:14
是的,但没有发现任何东西 – buge 2010-04-07 15:51:52
因此,在没有错误报告的情况下查找错误时,正常的行为方式是提交错误报告。 – 2010-04-07 17:50:53