[英]Java interface generics where implementing classes define the type
我正在尝试为一个库设计一些接口,该接口将支持其数据的多个存储系统 - 如 mysql 或 mongo。
我正在尝试设计一个单一的Model
接口,以便使用我的 API 的任何人都可以看到哪些数据可用。 问题是ID
或主键类型不同。 例如从 mysql 它将是一个Long
并且 mongo 使用 ObjectId 等。
我想我可以用泛型来处理这个问题,但我不确定这是正确的方法。 我不想一直强制转换以获得正确的 ID 类型。
这是一种可以接受的方法还是我应该使用其他方法? 我不想用这种方法构建我的 API,然后遇到问题而不得不重做这一切。
狗模型界面:
public interface DogModel<T> {
T getId();
}
sql特定的狗模型:
public class SqlDogModel implements DogModel<Long> {
private final Long id;
public SqlDogModel(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
}
我如何在通用存储接口中声明模型:
public interface StorageAdapter {
Optional<DogModel> getDog(String name);
}
它可以变得更简单:抽象类可以实现接口,但在我的示例中,我在基类中有 getter 和 setter 逻辑,这不能在接口中发生,因为接口没有逻辑。
public abstract class DogModel < T > {
T id;
public T getId() {
return id;
}
public void setId(T id) {
this.id = id;
}}
public class SqlDogModel extends DogModel < Long > {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.