Java - 无限循环单例类方法调用

标签 java singleton singleton-methods

我有一个关于单例类的问题。当我调用方法 next() 时,我预计 mProcessIndex 会增加,但实际上,它不会增加,因此会导致堆栈溢出错误。那么,问题是修改 mProcessIndex 值的正确方法是什么?

代码如下:

public class HomePopupDisplayManager {
    private static HomePopupDisplayManager sInstance;
    private List<WeakReference<HomePopupMessage>> mMessages;
    private int mProcessIndex;

    private HomePopupDisplayManager() {
        mMessages = new ArrayList<>();
        mProcessIndex = 0;
    }

    public static synchronized HomePopupDisplayManager getInstance() {
        if (sInstance == null) {
            sInstance = new HomePopupDisplayManager();
        }

        return sInstance;
    }

        public void register(@NonNull HomePopupMessage message, @IntRange(from = 0) int order) {
            mMessages.add(order, new WeakReference<>(message));
    }

    public void next() {
        if (mProcessIndex >= 0 && mProcessIndex < mMessages.size()) {
            HomePopupMessage message = mMessages.get(mProcessIndex).get();
            if (message != null) {
                next();
                mProcessIndex++;
            }
        }
    }
}

最佳答案

问题出在:

next();
mProcessIndex++;

应该是:

mProcessIndex++;
next();

关于Java - 无限循环单例类方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43601179/

相关文章:

c++ - 类中的静态对象(单例)

c++ - 不稳定的单例成员?

java - Singleton 类引发 ClassCastException

Ruby 类 << abcd 语法

java - Hibernate 和 Spring 注解 @OneToMany 未映射类错误

java - 设计输出多个文件(包括二进制输出)的 Apache Beam 转换的理想方法是什么?

java - 我想知道如何使用用户选择的音乐文件,然后检测特定的声音频率。安卓

Ruby 单例类

Objective-C 宏 - 调用单例对象的方法

Java 8 lambda 表达式求值