繁体   English   中英

Java 接口泛型,其中实现类定义类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM