Я предполагаю, что вы пытались что-то вроде:
class MyService implements ContactsService {
@Override
public <T extends Response> T execute(Action<T> action) {
return (T)new GetDetailsResponse();
}
}
Проблема в том, что я, возможно, еще один класс, который реализует MyResponse ответ. Тогда я могу назвать:
Action<MyResponse> action = new Action<MyResponse>();
// you can't actually instantiate an interface, just an example
// the action should be some instance of a class implementing Action<MyResponse>
MyReponse r = myService.execute(action);
Но выполнить метод возвращает экземпляр GetDetailsResponse, который несовместим с MyReponse. Вам нужно вернуть тип T, который задается действием, которое вы передаете для выполнения.
Насколько я могу судить, вы не можете создать новую переменную типа T внутри выполнения (не без каких-либо непроверенных бросков). Вероятно, вам нужен класс action, чтобы предоставить вам экземпляр Response, который вы можете вернуть из execute. Что-то вроде этого:
interface Response {
void setWhatever(String value);
}
interface Action<T extends Response> {
T getResponse();
}
class MyAction implements Action<GetDetailsResponse> {
@Override
public GetDetailsResponse getResponse() {
return new GetDetailsResponse();
}
}
class MyService implements ContactsService {
@Override
public <T extends Response> T execute(Action<T> action) {
T response = action.getResponse();
// do something to Response here like
response.setWhatever("some value");
return response;
}
}
Отсутствует '' после названия интерфейса опечатка? –
fixed missing T – Shanta
Что такое подпись 'Action' class/interface? Покажите нам пример с предупреждением компилятора. –