Это известная проблема? У меня были проблемы с поиском результатов поиска.
При выполнении итерации по 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();
Это ошибка или особенность? : Р
Билет на это уже есть где-нибудь?