我正在尝试创建一个“CRUD manager”类,执行扩展我创建的抽象超类的对象的数据库操作。抽象类非常简单:
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的类,这些类代表我的业务实体:Car
,Customer
,Lease
我没有为每个业务实体创建一个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中有可能吗?或者,这个想法有什么不对/认为这是一个可以接受的设计选择吗?
(明天我可能会先放弃它,因为要概括很多行为可能太难了,但此刻我很好奇它是如何做到的。
答案 0 :(得分:4)
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>();
答案 1 :(得分:1)
public interface MyInterface<T extends MyClass>
答案 2 :(得分:1)
您可以将接口行更改为public <T> interface ICrudManager <T exdents IndexedEntity>
,如果您尝试插入不匹配的类,将导致编译器错误。
如果您希望系统更加动态,您可以使用带有初始化程序的抽象类,该初始化程序在执行期间测试类型。
public abstract <T> class {
{
if(!T instanceof IndexedEntity)
throw new TypeException()
}
}