2016-07-05 2 views

답변

0

나는 이것이 작동 할 것이라고 알았지 만 확실하지는 않습니다.

public abstract class GenericEnumStateMachineUtils extends StateMachineUtils { 

public static <S, E> Collection<E> findEventsForState(StateMachine<S, E> stateMachine, S state) { 
    Collection<E> eventsForState = stateMachine.getTransitions().stream().filter(p -> p.getSource().getId().equals(state)).map(p -> p.getTrigger().getEvent()).collect(Collectors.toCollection(ArrayList::new)); 
    return eventsForState; 
} 
0

불행히도 특정 상태의 컴퓨터가 특정 이벤트를 처리/수락 할 수 있는지를 알 수있는 확실한 방법이 없습니다. 이벤트를 열거 형으로 사용하면 가능한 값을 알 수 있지만 이벤트가 문자열 인 경우 외부 값을 목록에 저장하지 않으면 가능한 값의 무한한 목록이 있습니다.

서로 다른 이벤트가있을 수있는 중첩 된 계층 적 상태가 있고 가장 낮은 활성 상태가 부모 상태로 제공되는 이벤트를 허용하지 않는 경우 더욱 복잡해집니다.

다이내믹 한 평가를 수행하고 머신이 받아 들일 수있는 이벤트에 대한 질문을하는 것이 미래의 머신이 무엇을 할 것인지 예측하는 것과 같은 문제입니다.

+0

예 저는 경비원에 대해 걱정했습니다. 그렇습니다. enum을 사용합니다. AbstractStateMachine.acceptEvent의 논리를 재사용 할 수 있는지보고 queueEvent (message)를 피할 수 있는지 계속 찾고 있습니다. – Petar

관련 문제