我有这个界面:
interface Entity<PK> {
PK getPk();
void setPk(PK pk);
}
我这样覆盖:
class User implements Entity<User.PK> {
PK pk;
@Override
public PK getPk() { return pk; }
@Override
public void setPk(PK pk) { this.pk = pk; }
// Composed primary key
class PK {
String id;
String email;
}
}
但是如果我必须扩展User类以扩展通用类型User.PK
,我就不会因为the method setPk(UserEntity.PK) of type UserEntity must override or implement a supertype method
来实现。
class UserEntity extends User {
PK pk;
@Override
public PK getPk() { return pk; }
@Override
public void setPk(PK pk) { this.pk = pk; }
class PK extends User.PK implements Serializable {
String id;
String email;
}
}
那么我如何为给定的泛型类型创建一个接口,但又能够扩展实现它的类?
答案 0 :(得分:0)
我会建议这种解决方案:
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
。