有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java泛型类型继承

我有一个基本服务声明如下

BaseService<M, S>

我有另一个扩展基本服务的服务,声明如下:

AnimalService extends BaseService<Animal, AnimalStatus>

现在,我需要另一个服务来传递模型狗而不是动物(Dog extends animal),创建一个新的服务将非常好:

DogService extends BaseService<Dog, AnimalStatus>

问题是,DogService基本上与AnimalService在功能上是相同的,因此仅为dog声明另一个服务只是重复AnimalService的代码

是否有一种方法可以声明DogService,以便在使用新的模型狗时可以重用动物服务中的代码,或者是否有一种方法可以以通用的方式声明AnimalService,以便它也可以接受模型狗


共 (1) 个答案

  1. # 1 楼答案

    我建议将AnimalService定义为一个泛型类,如下所示:

    AnimalService<T extends Animal> extends BaseService<T, AnimalStatus> {
        ...
    }
    

    这允许我们使用扩展Animal的类型实例化AnimalService,甚至Animal本身:

    class Animal {
        ... 
    }
    
    class Dog extends Animal {
        ...
    }
    
    ...
    
    final AnimalService<Animal> animalService = new AnimalService<Animal>();
    final AnimalService<Dog> dogService = new AnimalService<Dog>();
    

    如果我们需要一个单独的类DogService,以添加或重写某些方法,我们还可以将其定义为:

    class DogService extends AnimalService<Dog> {
        ...
    }