Дженерики просто предоставляют способ пропустить явные приведения.
Если вы не можете сделать что-то с кастингом, вы также не можете сделать это с дженериками.
Вы не можете сделать это с помощью приведения, так что вы не можете сделать это с помощью дженериков.
Я бы спросил, действительно ли наследование здесь то, что вам нужно. Альтернативой может быть композиция:
class GenericResult<D> {
Long count;
D getDao();
}
, которая обеспечивает доступ к DAO, но GenericResult
не является DAO, что мне кажется более правильным.