Re[3]: ООП, Java, полиморфизм, generics...
C>C>public abstract class AbstractSession<R extends Request>
C> implements Session, RequestSource<R>, Stateful<AbstractSession, AbstractSession.State>
C>
В абстрактных классах это как раз нормально (хотя я бы написал SessionState вместо AbstractSession.State). С появлением Generics одна из функций абстрактных супертипов как раз стала в том, чтобы выполнить подстановки в шаблонах для использования в потомках.
Если у вас несколько разных типов сессий, которые активно используются, вы за счет минимального усложнения в супертипе сильно упрощаете остальной код.