在运行时在类中修改的值



我正试图循环使用Registration类中已经填充的值。我已经在Registration类的getInstance()方法中放置了一个断点。当光标到达下面的循环代码时。

for (final Registration.HolderEntry entry : Registration.getInstance()) {
        // do other things..
}

我在上面做了F5。然后它粘到Registration类的getInstance()方法(下面是该类)。当我检查instance变量时,我总是看到listOfBundles列表中填充的值,这很好。

但是,如果我继续按F5键,在某个时刻,它会出现在Registration类中的iterator方法上,然后如果我检查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
}

我希望这个问题足够清楚。有人能告诉我我来这里怎么了吗?

因为使用静态实例总是从返回相同的对象

 public static Registration getInstance()

方法。(仅初始化一次注册)。

没有什么不同的对象是您的迭代。同一个对象正在您的迭代中迭代。它不像是应用于您在迭代时所做的每一个对象更改,而是和您迭代并更改值的对象相同。

我不知道你的真正要求。但是试着用这个。

public static Registration getInstance() {
        return new Registration();;
    }

相关内容

  • 没有找到相关文章

最新更新