我试图循环已经在注册类中填充的值。我已经getInstance()
在注册类的方法中放置了一个断点。当光标到达下面的for循环代码时。
for (final Registration.HolderEntry entry : Registration.getInstance()) {
// do other things..
}
我对此做了F5。然后它转到getInstance()
注册类的方法(下面是类)。当我当时检查instance
变量时,我总是看到listOfBundles
列表中填充的值很好。
但是,如果我继续按 F5,在某些时候它会涉及到iterator
Registration 类中的方法,然后如果我检查 on listOfBundles list
,我在该列表中看不到任何值,这就是我无法理解它为什么会发生的原因这个。没有其他代码正在运行,这可能会改变listOfBundles
.
public class Registration implements Iterable<Registration.HolderEntry> {
private List<String> listOfBundles = new LinkedList<String>();
private final Map<String, HolderEntry> bundleMapper = new HashMap<String, HolderEntry>();
private Registration() {
//
}
private static class BundlesHolder {
static final Registration instance = new Registration();
}
public static Registration getInstance() {
return BundlesHolder.instance;
}
public synchronized void registerBundles(final String bundleName, final IBundleCollection collection) {
HolderEntry bundleHolder = new HolderEntry(bundleName, collection);
bundleMapper.put(bundleName, bundleHolder);
listOfBundles.add(bundleName);
}
@Override
public synchronized Iterator<HolderEntry> iterator() {
List<String> lst = new LinkedList<String>(listOfBundles);
List<HolderEntry> list = new LinkedList<HolderEntry>();
for (String clName : lst) {
if (bundleMapper.containsKey(clName)) {
list.add(bundleMapper.get(clName));
}
}
Collections.reverse(list);
return list.iterator();
}
// some other code
}
我希望这个问题足够清楚。谁能告诉我我要去这里有什么问题?