Мой вопрос больше о предотвращении ошибок, чем о том, чтобы заставить что-то работать. Создание fsm, изменение указателя состояния внутри состояния, что именно происходит. Позвольте мне опубликовать некоторый код, чтобы сделать мой вопрос более ясным. Я буду стараться держать необходимый минимум, чтобы получить свою точку зрения:java указатели и конечные машины
class foo{
abstract fsm {
abstract void enter();
final void changeState(fsm state) { State = state; State.enter() }
}
state1 extends fsm ... implementation left out
state2 extends fsm... implementation left out
fsm State = null;
foo(){
State = new state1;
State.changeState(new state2);
}
}
Так что мой вопрос, когда changeState происходит, состояние устанавливается в новое состояние, а затем его метод ввода() вызывается. Но что происходит с текущим состоянием, то есть currentState.changeState (...), что означает, что мы все еще находимся в вызове метода предыдущего состояния. Этот метод остается в стеке до тех пор, пока он не перейдет ко всему его коду и не вернется (то есть есть два состояния в памяти - предыдущее состояние (из-за его выполнения по-прежнему выполняется), а также новое состояние и его вызов вызова метода ввода.) или те, что предыдущее состояние стало помечено для сбора мусора, поскольку указатель на него больше не указатель, и возможно (маловероятно, но возможно), что метод может быть собран в мусор, прежде чем метод сможет закончить выполнение?
Как я уже сказал, этот вопрос более глубок и связан с тем, как работает JVM, и выполняется сбор мусора/указателя. Все ответы приветствуются, но мне хотелось бы, если это возможно, ссылки на статьи об этом. Спасибо всем
Концептуально говоря, это, вероятно, не то, как я вообще буду заниматься внедрением FSM ... Я признаю, я очень озадачен этим вопросом. Что именно вы спрашиваете здесь? Вы спрашиваете, что произойдет, если ваш вызов 'changeState' был вызван как есть (если он был действителен, а это действительно так)? – Makoto