Java genérico de outro genérico

Tenho interface:

interface Identifable<T extends Serializable> {
      T getID();
}

e classe que implementa isso:

public class Cat implements Identifable<Long> {
       public Long getID(){...};
}

tudo funciona bem. tão longe. Agora eu quero criar GenericDAO, porque eu não posso criar isso:

public abstract GenericDAO<T extends Identifable<S>> {
    T getByID(S id);
}

Eu só posso declarar meu GenericDAO como este:

public abstract GenericDAO<T extends Identifable, S> {
  T getById(S id);
}

E classe completa:

public CatDAO extends GenericDAO<Cat, Long> {
      Cat getById(Long id);
}

Mas acho inútil, porque repito informação. Eu já declarei que Cat implementa Identifable <Long>, então por que devo declarar GenericDAO <Cat, Long>, não apenas GenericDAO <Cat>?

questionAnswers(2)

yourAnswerToTheQuestion