Вы пробовали:
public interface WatchableDao<T extends Watchable<?>>
(т.е. это Watchable<Something>
, но мне все равно, что такое Something
)
Я не пробовал, но оно того стоит.
РЕДАКТИРОВАТЬ: после редактирования вопроса, кажется, вам действительно нужен PK в качестве параметра типа для интерфейса. В этом случае я считаю, что вы должны эффективно повторить ограничение, как и вы. Да, это избыточно, но я думаю, что это проще, чем язык, указывающий, какие ограничения эффективные будут применяться к PK на основе его использования в качестве аргумента типа в другом месте. Если это утешит, то же самое верно и в C #.
Это также делает ограничения на PK понятными только из самого интерфейса, вместо того, чтобы смотреть на другой интерфейс, чтобы увидеть, что выполнимо.