gpt4 book ai didi

java - ServiceLoader 双迭代器问题

转载 作者:搜寻专家 更新时间:2023-11-01 03:30:07 28 4
gpt4 key购买 nike

这是一个已知问题吗?我找不到任何搜索结果。

当迭代已经在进行时迭代 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

这个地方已经有门票了吗?

最佳答案

这可能是一个错误。我认为这是因为 iterator.next() 在内部对惰性迭代器的相同引用调用 next() 。这种行为违反了“最小惊讶原则”

关于java - ServiceLoader 双迭代器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593777/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com