В моем приложении GWT у меня есть такой класс:
public class AppActivityMapper implements ActivityMapper {
@Override public Activity getActivity(Place place) {
if(place instanceof ThisPlace) {
return new ThisActivity((ThisPlace)place);
}
if(place instanceof ThatPlace) {
return new ThatActivity((ThatPlace)place);
}
if(place instanceof AnotherPlace) {
return new AnotherActivity((AnotherPlace)place);
}
// you get the idea
}
}
Объекты ActivityMapper, Activity и Place являются частью инфраструктуры, и интерфейс подразумевает, что это именно такбыть использованным.
Однако, согласно принципу подстановки Лискова , метод, который принимает тип, но выполняет проверку типа для подклассов, чтобы вывести, какое действие предпринять, является нарушением принципа.
Интерфейс ActivityMapper GWT по своей природе поощряет нарушение LSP?Или есть другой LSP-совместимый способ кодирования этого метода, о котором я не задумывался?