У меня есть абстрактный суперсервис, который должен выполнять некоторую общую логику. Несколько сервисов реализуют этот суперсервис. Я выбрал ServiceImpl на основе условия и хочу назначить его абстрактному типу, чтобы позже запустить общую логику.Как создать общие методы, которые принимают любой параметр типа?
Что не так в следующем? Я хотел бы передать в метод process()
любой объект, который имеет/extends BaseResponse
, например FirstResponse
в моем примере.
//superservice
abstract class AbstractService<T extends BaseResponse> {
public void process(T t) {
//execute logic that is common to a BaseResponse
}
}
//implementations
class FirstService extends AbstractService<FirstResponse extends BaseResponse> {
}
//usage
AbstractService<? extends BaseResponse> myservice = new FirstService(); //chose by condition
myservice.process(new FirstResponse()); //ERROR
результат:
The method build(capture#2-of ? extends BaseResponse)
in the type AbstractService<capture#2-of ? extends BaseResponse> is not applicable for the arguments (FirstResponse)
ли 'FirstService' работа с' BaseResponse' или любой подкласс «BaseResponse» или конкретного подкласса? – Bohemian
Я думаю 'AbstractService super BaseResponse> myservice = new FirstService() 'должен делать трюк не так? –
'FirstService' будет работать с' BaseResponse'; '? super' позволит вызвать 'myservice.process()', но я тогда не могу назначить 'FirstService' больше ... – membersound