Estou construindo um simulador que analisa alguns eventos STDIN
e os "executa". Atualmente, minha formação é principalmente a programação funcional, por isso parecia natural fazer algo assim:
data Event = Thing1 String Int | Thing2 Int | Thing3 String String Int
Parse :: String -> [Event]
Simulate :: [Event] -> [Result]
onde simular seria
case event
of Thing1 a b => compute for thing one
| Thing2 a => compute for thing two
etc. Qual é a maneira idiomática de fazer esse tipo de coisa em Java? O Google me apontou na direção de classes aninhadas e do padrão de visitantes, mas isso parece bastante pesado na minha tentativa. O apagamento de tipo parece estar lutando comigo, com força. Você poderia me mostrar um resumo de como isso seria feito corretamente?
Event
tipo é conceitualmente equivalente a ter umInt
e doisMaybe Strings
?