Я бы посоветовал это решение:
- ваш
interface Entity<PK>
выглядит хорошо - извлеките
class PK
определение в отдельный файл с именем UserPk
- слегкапереопределить
User
как этот
class User<PK> implements Entity<PK> {
private PK pk;
@Override
public PK getPk() { return pk; }
@Override
public void setPk(PK pk) { this.pk = pk; }
}
и использовать его позже как new User<UserPk>()
поместить в отдельный класс тоже
class UserEntityPk extends UserPk implements Serializable {
String id;
String email;
}
повторное использование
class User<PK>
таким образом с новым параметром ключа
new User<UserEntityPk>()
Основная идея состоит в том, чтобы отделить ваши параметризованные классы от определений ключей для упрощения архитектуры.
Кстати, просто любопытно, в чем разница между определениями ваших ключей? Оба они имеют одинаковые строки id
и email
. Похоже, вам не нужно class PK extends User.PK implements Serializable
вообще.