Java泛型类型继承
我有一个基本服务声明如下
BaseService<M, S>
我有另一个扩展基本服务的服务,声明如下:
AnimalService extends BaseService<Animal, AnimalStatus>
现在,我需要另一个服务来传递模型狗而不是动物(Dog extends animal),创建一个新的服务将非常好:
DogService extends BaseService<Dog, AnimalStatus>
问题是,DogService基本上与AnimalService在功能上是相同的,因此仅为dog声明另一个服务只是重复AnimalService的代码
是否有一种方法可以声明DogService,以便在使用新的模型狗时可以重用动物服务中的代码,或者是否有一种方法可以以通用的方式声明AnimalService,以便它也可以接受模型狗
# 1 楼答案
我建议将
AnimalService
定义为一个泛型类,如下所示:这允许我们使用扩展
Animal
的类型实例化AnimalService
,甚至Animal
本身:如果我们需要一个单独的类
DogService
,以添加或重写某些方法,我们还可以将其定义为: