我正在开发一个项目,需要将服务添加到组件中。 Service
类是一个没有任何方法的接口。以下是我的服务工作方式的示例:
public interface Service { }
public interface CarWash extends Service {
void washCar(Car car);
}
public interface CarRepair extends Service {
void repairCar(Car car);
}
现在有许多这些服务的实现。一个单独的类可以实现多个服务,就像这个车库类:
public class Garage implements CarWash, CarRepair {
@Override
public void washCar(Car car) { /* .. */ }
@Override
public void repairCar(Car car) { /* .. */ }
}
当向组件添加服务时,我不想需要将服务用于所有任务,例如只使用Garage
来清洗汽车(CarWash
)而不是维修它们(CarRepair
)。因此,我将任务指定为类,就像这样:
void addService(Service service, Class<? extends Service> task);
为了检查该服务是否能够执行任务,我使用了泛型:
<T extends Service> addService(T service, Class<? super T> task);
这个方法可以正常工作,但是没有检查提供的任务是否确实是任务(一个实现了Service
接口的类),所以可以这样改进:
addService(myTask, Object.class);
我正在寻找一种方法来指定service
需要实现(扩展)task
和task
扩展了Service
接口,就像这样(不能编译):
<T extends Service> addService(T service, Class<? super T extends Service> task);
<T extends Service, S extends T> void addService(S service, Class<T> clazz);
? - Andy Turner