Estoy empezando a trabajar con Java después de algunos proyectos en C# y C++.Cómo superar el problema con el borrado de tipo para la implementación de visitante
que quería diseñar interfaces de visitantes así:
public interface ActionVisitor<A> {
void visitAction(A action);
}
public interface MySmallActionVisitor
extends ActionVisitor<ActionA>,
ActionVisitor<ActionB>
{
}
public interface MyFullActionVisitor
extends ActionVisitor<ActionA>,
ActionVisitor<ActionB>,ActionVisitor<ActionC>,ActionVisitor<ActionD> //....
{
}
Por supuesto, esto no funciona porque el tipo de borrado. (La razón por la que quiero algo como esto es que voy a tener diferentes interfaces de Visitante para diferentes grupos de acciones que se pueden visitar.)
La única solución que se me viene a la mente es declarar interfaces de
public interface ActionAVisitor {
void visitAction(ActionA action);
}
public interface ActionBVisitor {
void visitAction(ActionB action);
}
//...
y luego
public interface MySmallActionVisitor
extends ActionAVisitor, ActionBVisitor
{
}
Esto funcionaría, pero no me gustaría la declaración de todas las interfaces ActionXVisitor que es la repetición estúpida y un montón de archivos ...
¿Tiene alguna idea de cómo hacerlo mejor?
¡Muchas gracias!
quieres decir con "instanceof"? Eso es lo que el patrón de visitante quiere evitar. Además, tendría que escribir estos bloques si en cada visitante (MySmallVisitor, MyFullVisitor y otros). – Philipp
sí, quise decir instanceof. intentar evitarlo, probablemente conducirá a mucho más código al final. –
si realmente no hay manera de superar el problema que describí, prefiero tener más código que código de instancia ... Lenguaje deficiente :-( – Philipp