2016-04-19 8 views
2

Ich bin nicht vertraut mit enum und möchte fragen, ob ich eine enum in eine abstrakte Methode setzen und in einer anderen Klasse überschreiben kann? Hier ist ein Beispiel, ich arbeite mit:Java - Kann in einem Parameter einer abstrakten Methode enumerieren

Ich habe viele Unterklassen, die die abstrakte Klasse erweitern, sie haben jeweils ihre eigenen Unterbefehl als Aufzählungstyp. Der Aufzählungstyp hat eine Int-ID und einen String-Namen.

Auch eine Methode übernimmt den Unterbefehl und ändert die Eingabe-UI-Basis für den ausgewählten Unterbefehl.

public class CommandOne extends CommandClass{ 
    ........ 

    public void updateUIBySubCmd(SubCommand subCmd){ 
      /*Do Something*/ 
    } 

    private enum SubCommand{ 
     SubCmd1 (ID1, Name1), 
     SubCmd2 (ID2, Name2), 
     ........ 
    } 
} 

Ich habe eine abstrakte Klasse, die durch die obige Unterklasse erweitert wird, es keine ENUM besteht, sondern nur ein paar Funktion außer Kraft von der Unterklasse.

Die Frage ist, kann ich Folgendes tun und haben die Methode updateUIBySubCmd abstrakte mit einem Aufzählungstyp geworden? Wenn es erlaubt ist, wie kann ich es erreichen?

public abstract class CommandClass{ 
.......... 
    public abstract void updateUIBySubCmd(Enum x); 
} 
+0

Sie haben den Code, warum es nicht versuchen? – John3136

+0

Da gibt es mir den Fehler: Methode überschreibt nicht oder implementieren Sie eine Methode von einem Supertype – Allen

+0

, wenn die Enums eine gemeinsame Schnittstelle implementieren, können Sie dies tun. –

Antwort

2

Klingt wie Sie nach etwas wie folgt aussehen:

public abstract class CommandClass<E extends Enum<E>> { 
.......... 
    public abstract void updateUIBySubCmd(E x); 
} 

public class CommandOne extends CommandClass<SubCommand> { 
    ........ 

    @Override 
    public void updateUIBySubCmd(SubCommand subCmd){ 
      /*Do Something*/ 
    } 
} 

public enum SubCommand { 
    SubCmd1 (ID1, Name1), 
    SubCmd2 (ID2, Name2), 
    ........ 
} 
0

Java Aufzählungen sind im Wesentlichen Klassen, die java.lang.Enum erstrecken. Deshalb erhalten Sie den Fehler, den Sie bekommen. Die Elternklasse kann keinen Typ angeben, und die Unterklasse erwartet einen eingeschränkteren Typ. Es muss auch Enum angegeben werden.

Allerdings bin ich mir nicht sicher, dass ein ENum wirklich das ist, was Sie hier wollen. Sie möchten wahrscheinlich einen allgemeinen Schnittstellentyp für einen Unterbefehl und dann die verschiedenen Befehle als statische verschachtelte Klassen in den spezifischen Befehlsimplementierungen angeben. Dies gibt Ihnen jedoch keine Art der Sicherheit beim Kompilieren, da Sie immer noch das Problem haben, dass die Unterklasse denselben Schnittstellentyp wie das übergeordnete Element verwendet.

Verwandte Themen