내 응용 프로그램 계층 /보기에는 칠판이라는 이벤트 디스패치 시스템이 있습니다. 여기에는 리스너가 열거 형 EventType으로 구현 된 이벤트 유형 인 키와 해시 맵에 의해 저장되며이 값은이 이벤트 유형을 수신하는 수신기 참조입니다. 예 : 모델 객체는 "LOCAL_PLAYER_INPUT"이벤트 유형을 청취하고 있으며, 칠판은 플레이어가 EventHandler 인터페이스를 구현했기 때문에 처리하고 플레이어에게 알립니다.Enum을 사용한 캡슐화 된 이벤트 처리
모델 용 독립형 칠판을 구현하여 모델을 더욱 분리하고 싶습니다. 그런 다음 응용 프로그램 계층이 키보드 나 터치로 I/O를 가져 오므로 응용 프로그램 계층 칠판에 청취자로 추가됩니다. 모델 칠판 자체가 이벤트를 더 위임합니다.
addListener(model.blackboard, MODEL); //Types: (EventHandler, EventType)
기준 : 만 같은 모델을 전달하여
MODEL.LOCAL.PLAYER_INPUT
모델은 뷰 칠판에 리스너로 등록 될 것이다 :이를 위해 나는 이벤트가 이러한 방식으로 분류되는 열거 hierachy를 만들고 싶었 내가 만든 enum과 인터페이스를 결합하여 MODEL.XY와 같은 이벤트 유형을 작성할 수 있지만 MODEL이 EventType 인터페이스를 구현하고 있지만 addListener에 의해 허용되지 않습니다.
어떻게해야합니까?
편집 : 좀 더 코드
의 addListener 방법 :
public void addListener(EventHandler handler, EventType eventType) {
getListener(eventType).add(handler);}
private Array<EventHandler> getListener(EventType eventType) {
if(map.containsKey(eventType))
return map.get(eventType);
else {
Array<EventHandler> tmp = new Array<EventHandler>(false, 1, EventHandler.class);
map.put(eventType, tmp);
return tmp;
}
}
열거 형 :
public interface WL extends EventType {
public static enum LOCAL {
PLAYER_INPUT,
NPC_INPUT
}
}
GameEvent :
키가 열거 형이므로 EnumMap 사용을 고려해야합니다. 비록 이것이 여기에서 실제로 중요한 성능이라고는 생각하지 않지만 – fge
그것은 좋은 팁입니다. 저는 그것을 구현할 것입니다, 감사합니다! –
더 많은 코드가 도움이 될 것입니다. enum (s)은 어떻게 생겼는지, 컴파일러는 무엇에 대해 불평합니까? – lost