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();