Проблема в том, что ваш класс MyPostfixMachine имеет закрытое поле MyPostfixMachine mpm , которое инициализируется новым MyPostfixMachine . Так как этот новый MyPostfixMachine также имеет закрытое поле MyPostfixMachine mpm, которое инициализируется новым MyPostfixMachine ... вы получаете его. :) Это продолжается и продолжается вечно (или пока ваш стек не заполнится).
Вот проблемный кусок кода:
public class MyPostfixMachine implements PostfixMachineInterface {
MyMathOperations mmo = new MyMathOperations();
MyPostfixMachine mpm = new MyPostfixMachine(); // problem is here
// ...
}
Я думаю, вы можете просто удалить приватное поле mpm. Просто вызовите методы текущего экземпляра. Так что вместо:
if (mpm.isParsableToDouble(String.valueOf(q.remove()))) {...}
Вы можете просто написать:
if (isParsableToDouble(String.valueOf(q.remove()))) {...}
или (равнозначно, но более явно):
if (this.isParsableToDouble(String.valueOf(q.remove()))) {...}
В любом случае, просто удалите приватное поле mpm, и исключение StackOverflowException должно исчезнуть.