Я начинаю работать с Java после некоторых проектов на C # и C ++.
Я хотел спроектировать интерфейсы для посетителей так:
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> //....
{
}
Конечно, это не работает, потому чтотипа стирания.(Причина, по которой я хочу что-то подобное, заключается в том, что у меня будут разные интерфейсы Visitor для разных групп действий, которые можно посетить.)
Единственное решение, которое приходит мне в голову, - это объявить интерфейсы
public interface ActionAVisitor {
void visitAction(ActionA action);
}
public interface ActionBVisitor {
void visitAction(ActionB action);
}
//...
, а затем
public interface MySmallActionVisitor
extends ActionAVisitor, ActionBVisitor
{
}
Это бы сработало, но мне не хотелось бы объявлять все интерфейсы ActionXVisitor, что является глупым повторением и большим количеством файлов ...
У вас есть идеи, как сделать это лучше?
Большое спасибо!