Como estender a classe enum da classe abstrata?
Tendo algo assim:
public enum Token
{
FOO("foo", "f"),
QUIT("quit", "q"),
UNKNOWN("", "");
...
public parse(String s) {
for (Token token : values()) {
...
return token;
}
return UNKNOWN;
}
}
Uma aula abstrata:
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;
}
}
E o extensor:
class Major extends Base
{
}
O que eu quero é estenderact
como sesuper
não lida com isso, em seguida, tentar lidar com isso emMajor
. Por exemplo. adicionarPRINT_STAT("print-statistics", "ps")
- mas ao mesmo tempo deixe oBase
padrões de identificador de classe comoQUIT
.
Esta é uma abordagem completamente errada?
O que eu fiz até agora é adicionar uma interface Tipicamente:
public interface BaseFace
{
public boolean act_other(String inp);
}
E na aulaBase implements BaseFace
:
case UNKNOWN:
OK = act_other(inp);
E na aulaMajor
:
public boolean act_other(String inp) {
if (inp.equals("blah")) {
do_blah();
return true;
}
return false;
}
Isso parece um design utilizável?
E uma questão importante:
Existe alguma boa maneira de estender oToken
classe de tal forma que eu possa usar a mesma abordagem switch emMajor
como emBase
? O que eu me pergunto é se há um melhor design e, segundo, se eu tenho que fazer uma nova classe Token paraMajor
ou se de alguma forma eu puder estender ou reutilizar o existente.
Edit: Point of concept é ter oBase
classe que eu posso facilmente reutilizar em diferentes projetos lidando com vários tipos de entrada.