Non è una questione di me essere bloccato, ma piuttosto sto cercando un modo ordinato per scrivere il mio codice.Enum all'interno di una enum
In sostanza, sto scrivendo un'applicazione basata su eventi. L'utente attiva un evento, l'evento viene inviato agli oggetti appropriati e gli oggetti gestiscono gli eventi. Ora sto lavorando alla scrittura dei metodi di gestore pari, e speravo di usare le istruzioni switch per determinare come gestire l'evento. Proprio ora, mentre sto lavorando sulla struttura generale, la classe di evento è davvero semplice:
public class Event {
public static enum Action {
MOVE, FOO, BAR
}
private Action action;
private int duration;
public Event(Action action, int duration) {
this.action = action;
this.duration = duration;
}
public Action getAction() {
return action;
}
public int getDuration() {
return duration;
}
Poi, in un'altra classe, avrò qualcosa di simile:
public void handleEvent(Event evt) {
switch(Event.getAction()) {
case MOVE: doSomething(); break;
case FOO: doSomething(); break;
case BAR: doSomething(); break;
default: break;
}
}
cosa avrei come fare è qualcosa di simile (anche se mi sarebbe naturalmente attaccare le istruzioni switch nelle proprie funzioni per evitare che si trasformi in una brutta palla di pelo di interruttori e dei casi):
public void handleEvent(Event evt) {
switch(Event.getAction()) {
case MOVE: switch(Event.getAction()) {
case UP: break;
case DOWN: break;
case LEFT: break;
case RIGHT: break;
}
case FOO: break;
case BAR: break;
default: break;
}
}
Quindi, vorrei creare enumerazioni nidificate ... in questo modo:
public static enum Action {
public enum MOVE {UP, DOWN, LEFT, RIGHT}, FOO, BAR
}
Non è che non riesco a evitare lo scenario, sarebbe solo ... conveniente. Quindi, mentre quanto sopra non funziona, c'è qualche metodo simile per raggiungere questo obiettivo? Sarebbe bello se potessi inviare un evento con l'azione "MOVE.UP", e il metodo identificherebbe prima come un'azione di tipo MOVE, e quindi identificherò ulteriormente che è specificamente nella direzione UP. Questo è solo un semplice esempio, sarebbe bello se potessi anche creare catene più lunghe, qualcosa come "DELETE.PAGE1.PARAGRAPH2.SENTENCE2.WORD11.LETTER3". Per come la vedo io, dovrò usare le stringhe e un sacco di istruzioni if / else. Sperando ci sia un modo migliore! (Oh, e le prestazioni sono importanti nel mio caso, se questo aiuta)
Non userei un enum per descrivere i tuoi eventi. Le enumerazioni sono le migliori per un insieme numerabile e costante di stati. SU, GIÙ, SINISTRA, DESTRA è buono perché è improbabile che cambi. MOVE, FOO, BAR si sente come dovrebbe essere facile da aggiungere a. Invece userei il polimorfismo. (Ogni evento che implementa un doSomething che assume lo stato del gioco). – ILMTitan