¿Cómo extender la clase enum de la clase abstracta?
Tener algo como esto:
public enum Token
{
FOO("foo", "f"),
QUIT("quit", "q"),
UNKNOWN("", "");
...
public parse(String s) {
for (Token token : values()) {
...
return token;
}
return UNKNOWN;
}
}
Una clase abstracta:
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;
}
}
Y el extensor:
class Major extends Base
{
}
Lo que quiero es ampliaract
como en sisuper
no lo maneja entonces trata de manejarlo enMajor
. P.ej. añadirPRINT_STAT("print-statistics", "ps")
- pero al mismo tiempo deja que elBase
clase maneja valores predeterminados comoQUIT
.
¿Es este un enfoque completamente equivocado?
Lo que he hecho hasta ahora es agregar una interfaz Normalmente:
public interface BaseFace
{
public boolean act_other(String inp);
}
Y en claseBase implements BaseFace
:
case UNKNOWN:
OK = act_other(inp);
Y en claseMajor
:
public boolean act_other(String inp) {
if (inp.equals("blah")) {
do_blah();
return true;
}
return false;
}
¿Esto parece un diseño utilizable?
Y, pregunta importante:
¿Hay alguna buena manera de extender elToken
clase tal que puedo usar el mismo enfoque de interruptor enMajor
como enBase
? Lo que me pregunto es si hay uno mejor diseño y segundo si tengo que crear una nueva clase de token paraMajor
o si de alguna manera puedo extender o reutilizar lo existente.
Editar: Punto de concepto es tener elBase
Clase que puedo reutilizar fácilmente en diferentes proyectos que manejan varios tipos de entrada.