Wie erweitert man die Aufzählungsklasse von der abstrakten Klasse?

So etwas zu haben:

public enum Token
{
     FOO("foo", "f"),
     QUIT("quit", "q"),
     UNKNOWN("", "");
     ...

     public parse(String s) {
         for (Token token : values()) {
              ...
              return token;
         }
         return UNKNOWN;
     }
}

Eine abstrakte Klasse:

abstract class Base 
{
    private boolean run;

    Base() {
        run = true;

        while (run) {
             inp = getInput();
             act(inp);
        }
    }

    public boolean act(String s) {
        boolean OK = true;
        switch (Token.parse(inp)) { /* Enum */
             case FOO:
                    do_foo();
                    break;
             case QUIT:
                    run = false;
                    break;
             case UNKNOWN:
                    print "Unknown" + inp;
                    OK = false;
                    break;
             }
         }
         return OK;
    }
}

Und der Extender:

class Major extends Base
{

}

Was ich will, ist zu verlängernact als obsuper nicht damit umgehen, dann versuchen Sie es inMajor. Z.B. hinzufügenPRINT_STAT("print-statistics", "ps") - aber gleichzeitig lassen dieBase Klasse behandeln Standardeinstellungen wieQUIT.

Ist das ein völlig falscher Ansatz?

Was ich bisher getan habe, ist das Hinzufügen einer Schnittstelle.

public interface BaseFace
{
      public boolean act_other(String inp);
}

Und im UnterrichtBase implements BaseFace:

      case UNKNOWN:
          OK = act_other(inp);

Und im UnterrichtMajor:

  public boolean act_other(String inp) { 
       if (inp.equals("blah")) {
            do_blah();
            return true; 
       }
       return false;
  }

Sieht das nach einem brauchbaren Design aus?

Und die Hauptfrage:

Gibt es eine gute Möglichkeit, dieToken Klasse so, dass ich den gleichen Switch-Ansatz in verwenden kannMajor wie inBase? Was ich mich frage ist, ob es zum einen ein besseres Design gibt und zum anderen, ob ich eine neue Token-Klasse für machen mussMajor oder wenn ich das bestehende irgendwie erweitern oder anderweitig weiterverwenden kann.

Edit: Sinn und Zweck ist es, die zu habenBase Klasse, die ich problemlos in verschiedenen Projekten wiederverwenden kann, die verschiedene Arten von Eingaben verarbeiten.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage