Java - вызов метода класса Infinity Loop Singleton

У меня вопрос о синглтон-классе. Когда я вызываю метод next(), я ожидаю, что mProcessIndex будет увеличен, но в действительности этого не произойдет, что приведет к ошибке stackru. Итак, вопрос в том, как правильно изменить значение 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++;
            }
        }
    }
}

2 ответа

Проблема в:

next();
mProcessIndex++;

Должно быть:

mProcessIndex++;
next();

Ваша функция next() входит в бесконечный рекурсивный цикл, так как она вызывается перед увеличением mProcessIndex. Поэтому mProcessIndex никогда не увеличивается. Вызовите mProcessIndex ++ before next();

Другие вопросы по тегам