Java интерфейсная иерархия и ее методы с ограниченным типом Generics - PullRequest
0 голосов
/ 30 января 2020

У меня есть сценарий, в котором я нашел построение иерархии типа следующим образом:

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, но там я не могу применять ограниченные дженерики.

Может кто-нибудь помочь с тем, что мне здесь не хватает?

1 Ответ

2 голосов
/ 30 января 2020

Когда вы указываете имя c, вы также можете указать информацию о типе. Здесь вы хотите extends для каждого соответствующего типа. Что-то вроде

public interface IComponent<REQUEST extends IComponentRequest,
            RESPONSE extends IComponentResponse> {
    RESPONSE execute(REQUEST request);
}
...