我正在開發一個需要將服務添加到組件的項目。 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);
我正在尋找一種方法符合規範IFY是service
需要實現(延長)的task
和task
是擴展Service
接口,這樣(不編譯):
<T extends Service> addService(T service, Class<? super T extends Service> task);
如何:' void addService(S服務,類 clazz);'? –
2015-04-04 21:39:12