繁体   English   中英

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

[英]Java - Infinity Loop Singleton class method call

我有一个关于单例课程的问题。 当我调用方法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();

您的next()函数进入无限递归循环,因为在递增mProcessIndex之前调用了该函数。因此mProcessIndex永远不会递增。 在next()之前调用mProcessIndex ++ ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM