我有这个界面:
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;
}
}
所以我如何为给定的泛型类型创建接口,但能够扩展实现该接口的类?
我将建议此解决方案:
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>()
关键思想是将参数化的类与键的定义分开。