Я пишу проект в Google App Engine, в нем есть несколько абстрактных классов, которые, я надеюсь, я смогу использовать в своих будущих проектах, и ряд конкретных классов, унаследованных от них.Среди других абстрактных классов у меня есть абстрактный сервлет, который управляет пользователями, и у меня есть абстрактный пользователь.AbstractUser имеет все необходимые поля и методы для его хранения в хранилище данных и определения, зарегистрирован ли пользователь в моей службе или нет.Он не реализует какую-либо конкретную функциональность проекта.Абстрактный сервлет, который управляет пользователями, ссылается только на методы, объявленные в классе AbstractUser, что позволяет ему генерировать ссылки для входа, выхода и регистрации (для незарегистрированных пользователей).Для реализации пользовательской функциональности конкретного проекта мне нужно создать подкласс абстрактного пользователя.Все сервлеты, которые я использую в своем проекте, являются косвенными потомками этого абстрактного сервлета управления пользователями, и пользователь является защищенным полем, поэтому сервлеты-потомки могут использовать его как свое собственное поле.Однако всякий раз, когда я хочу получить доступ к какому-либо конкретному методу проекта конкретного пользователя, мне нужно привести его к этому типу.т.е.
(abstract user managing servlet)
...
AbstractUser user = getUser();
...
abstract protected AbstractUser getUser();
(project-specific abstract servlet)
@Override
protected AbstractUser getUser() {
return MyUserFactory.getUser();
}
любой другой специфичный для проекта сервлет:
int a = ((ConcreteUser) user).getA();
Хорошо, я хотел бы как-то сделать так, чтобы тип «пользователя» в суперклассе зависел от чего-тов специфическом для проекта абстрактном классе.Это вообще возможно?
И я не хочу перемещать все элементы управления пользователями в слой, специфичный для проекта, поскольку я хотел бы, чтобы это было написано для моих будущих проектов:)
Спасибо за вашу помощь.