У меня есть сценарий, в котором я нашел построение иерархии типа следующим образом:
IComponent (интерфейс) -> AComponent (класс)
Здесь я хочу, чтобы IComponent содержал метод exeucte (), который будет реализован всеми классами, которые реализуют этот интерфейс. Теперь, кроме иерархии компонентов, я также хочу формат запроса / ответа для всех компонентов, поэтому я подумал о следующих вещах:
IComponentRequest -> AComponentRequest
IComponentResponse -> IComponentResponse
Теперь я хочу объявить метод execute () в IComponent таким образом, чтобы все классы, которые нужно реализовать, могли следовать классам запросов и ответов в вышеупомянутой иерархии запросов / ответов. Объясняя с точки зрения кода, в настоящее время я объявляю метод следующим образом:
public interface IComponent<IComponentRequest,IComponentResponse> {
IComponentResponse execute(IComponentRequest request);
}
То, что я на самом деле хочу, это что-то вроде:
<Any type which implements IComponentResponse> execute(<Any type which implements IComponentRequest> request) {
}
Я пытался использовать обобщенные значения, такие как:
public interface IComponent<REQUEST,RESPONSE> {}
Но в этих случаях я сталкиваюсь с проблемой в реализациях при вызове методов и получении ответов о том, что REQUEST и RESPONSE не являются конкретными java типами. Следовательно, я снова продолжил использовать надлежащие интерфейсы IComponentRequest и IComponentResponse, но там я не могу применять ограниченные дженерики.
Может кто-нибудь помочь с тем, что мне здесь не хватает?