Senhores,
eu posso facilmente utilizar os tipos enum para representar os estado de uma máquina, por exemplo:
public enum CSVEstado {
A,B,C;
}
Mas, existe alguma forma de eu controlar as transições de estado. Por exemplo, do estado A eu posso mudar para A,B e C. Do estado B eu posso mudar para A ou B. E do estado C posso ir para A,B ou C. (ver a figura em anexo).
Como posso fazer para que quando o estado do objeto for alterado do estado B para C gere por exemplo um java.lang.IllegalStateException?
Terei que encapsular um objeto desse enum em uma classe para realizar esse tipo de controle?
vw

É, acredito que vc vai ter de fazer isso sim. Colocar um setEstado() e dentro dele realizar essa lógica que você descreveu logo acima. Não conheço outro meio para fazer isso

Ou então no enum ter um método como getNextEstado e te retorna o proximo possivel
Oi professor,
Dê uma olhada nessa excelente referência sobre máquinas de estados escrita por Mat Buckland:
http://www.ai-junkie.com/architecture/state_driven/tut_state1.html
Ele mostra uma implementação usando o padrão State e creio que poderia ser facilmente adaptada para o contexto dos enums.
PS: Essa máquina representa os estados de um Analisador Léxico?
Nesse caso, não seria melhor recorrer a um automato finito, ou mesmo a uma ferramenta como o antlr?