我正在尝试为一个库设计一些接口,以支持其数据的多个存储系统 - 如 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);
}
答案 0 :(得分:1)
它可以变得更简单: 抽象类可以实现接口,但在我的示例中,我在基类中有 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 > {}