java - 创建一个泛型类,其类型参数仅限于某个父类(super class)

标签 java generics types

我正在尝试创建一个“CRUD 管理器”类,对扩展我创建的抽象父类(super class)的对象执行数据库操作。抽象类相当简单:

public abstract class IndexedEntity() {

    protected Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        if(id == null)
        this.id = id;
        else throw new UnsupportedOperationException
        ("The ID cannot be changed once it was set.");
    }

}

现在我有几个类来扩展此 IndexedEntity,这些类代表我的业务实体:CarCustomerLease

我想我应该尝试创建一个支持其公共(public)父类(super class)的公共(public) CRUD 类,而不是为每个业务实体创建一个 CRUD 管理器。

如何创建一个泛型类,该类在构造时采用类型参数,并且该类型参数仅限于某些类型 - 从 IndexedEntity 继承的类型?

类似于:

public interface ICrudManager<IndexedEntity> {

    public void add(IndexedEntity e);

    public IndexedEntity get(long id);

    public void update(IndexedEntity e);

    public void delete(IndexedEntity e);

    public List<IndexedEntity> getAll();

}

在Java中可以吗?或者,这个想法有什么问题吗/认为这是一个可以接受的设计选择吗?

(明天我可能会首先放弃它,因为概括很多行为可能太困难,但目前我很好奇如何做到这一点。

最佳答案

使用Bounded Type Parameters

public interface ICrudManager<T extends IndexedEntity> {

    public void add(T e);

    public IndexedEntity get(long id);

    public void update(T e);

    public void delete(T e);

    public List<T> getAll();

}

并且您可以创建类似 ICrudManager<Car> carManager = new CrudManagerImpl<Car>(); 的对象

关于java - 创建一个泛型类,其类型参数仅限于某个父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16420796/

相关文章:

按不同条件的 Java 搜索列表

c# - 小数点四舍五入问题

java - Java SVG 图形界面中的属性修改

java - 请帮助我解决 Spring Boot 2 中的错误,

c# - 如何在泛型类中映射默认 LINQ 表达式

generics - 没有泛型,静态类型语言如何处理?

java - 使用 IntelliJ Remote.serverException 时出现 Scala 错误

静态方法中的 Java 列表查询

class - 为什么无法通过 Type.getClass() 访问类的静态字段?

swift - "Cannot convert value of type ' T '..."泛型