Moja aplikacja Layer/View ma system wysyłania zdarzeń, czyli tablica. W nim detektory są przechowywane przez tablicę kontrolną z kluczami będącymi typami zdarzeń zaimplementowanymi jako enum EventType i wartości będące odsłuchiwaniem odsłuchiwania tego typu zdarzenia. Na przykład. obiekt modelu słucha zdarzenia typu "LOCAL_PLAYER_INPUT", przetwarza tablicę i powiadamia gracza, ponieważ odtwarzacz implementuje interfejs EventHandler.Hermetyzacja zdarzeń z Enums
Chciałbym oddzielić mój model poprzez wprowadzenie samodzielnej tablicy dla modelu. Następnie zostanie dodany jako słuchacz do tablicy warstw aplikacji, ponieważ warstwa aplikacji pobiera dane z klawiatury lub dotyku. Tablica modeli sama delegowałaby wydarzenia dalej. W tym chciałem stworzyć hierarchię enum w którym zdarzenie jest podzielone w ten sposób:
MODEL.LOCAL.PLAYER_INPUT
model byłby zarejestrowany jako słuchacza w widoku tablicy tylko przekazując MODEL tak:
addListener(model.blackboard, MODEL); //Types: (EventHandler, EventType)
By łącząc interfejsy z wyliczeniami, które osiągnąłem, że mogę pisać typy zdarzeń takie jak MODEL.XY, ale nie będą akceptowane przez addListener, chociaż MODEL implementuje interfejs EventType.
Co należy zrobić?
EDIT: Niektóre bardziej Kod
addListener metoda:
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;
}
}
wyliczenia:
public interface WL extends EventType {
public static enum LOCAL {
PLAYER_INPUT,
NPC_INPUT
}
}
GameEvent:
public GameEvent(EventType eventType, Object message) {
this.eventType = eventType;
this.message = message;
timeStamp = System.currentTimeMillis();
}
Ponieważ twoje klucze są wyliczone, powinieneś rozważyć użycie 'EnumMap'. Chociaż uważam, że to naprawdę nie jest krytyczne pod względem wydajności tutaj – fge
To dobra wskazówka, zaimplementuję ją, dzięki! –
Przydałoby się trochę więcej kodu. Jak wyglądają twoje wyliczenia, na co narzeka kompilator? – lost