目前我正在开发一个服务接口,它根据主键检索域对象。但是我觉得我没有有效地使用泛型。
基本域对象如下所示:
public interface DomainObject<PK extends Serializable> extends Serializable {
PK getID();
}
我的服务界面如下所示:
public interface LoadService<T extends DomainObject<PK>, PK extends Serializable> {
T load(PK ID);
}
这是有效的,但是我必须在服务泛型中指定PK类型,即使在T中已经知道PK类型。有什么办法可以在LoadService接口中再次定义我的PK吗?类似的东西:
LoadService<T extends DomainObject<? extends Serializable as PK> { ... }
非常感谢帮助!
答案 0 :(得分:1)
由于您在'LoadService'中使用PK类,因此无法避免这种情况。我的意思是你可以定义像
这样的服务interface LoadService<T extends DomainObject<?>> {
void store(T data);
}
但是,如果您使用PK类,那么这不是选项,因为编译器会检查PK类型是否与域对象类型兼容。
另一个选择是从 DomainObject 中删除类型参数,即执行以下操作:
interface DomainObject extends Serializable {
Serializable getID();
}
答案 1 :(得分:0)
尝试对type参数使用多个边界,如果T
扩展DomainObject
并实现Serializable
:
interface LoadService<T extends DomainObject<T> & Serializable> {
}