【发布时间】:2021-11-05 10:22:25
【问题描述】:
我有两个 json 模式文件,使用 jackson 从中生成了两个类- CarSearchResponse 和 HomeSearchResponse。它们不相关。
在我的实现中,我创建了一个具有通用功能的抽象类,然后为 Car 和 Home 创建了两个具体实现。
abstract class SearchResponseFlow {
void execute() {
responseFlow.map(response);
}
abstract ResponseWrapper<SearchResponse> getData(); // SearchResponse is imaginary, what change can I make to make it accept both CarSearchResponse and HomeSearchResponse.
}
class HomeSearchResponseFlow extends SearchResponseFlow {
void map(HomeSearchResponse resp) {
// logic
}
ResponseWrapper<HomeSearchResponse> getData() {
// logic
}
}
class CarSearchResponseFlow extends SearchResponseFlow {
void map(CarSearchResponse resp) {
// logic
}
ResponseWrapper<CarSearchResponse> getData() {
// logic
}
}
SearchResponse 是虚构的,因为 CarSearchResponse 和 HomeSearchResponse 都没有实现 SearchResponse,因为它们都是从不同的 JSON 模式文件单独生成的,我可以做些什么改变让它同时接受 CarSearchResponse 和 HomeSearchResponse。
我还要在外面消费 *SearchResponse,那该怎么办?
【问题讨论】:
-
假设
HomeSearchResponse等实现了SearchResponse,你可以只做ResponseWrapper<? extends SearchResponse>。您还应该更改子类中的getData方法以返回ResponseWrapper<? extends SearchResponse> -
使用通用抽象类 SearchResponseFlow
{ abstract ResponseWrapper getData();} -
SearchResponse 是虚构的,因为 CarSearchResponse 和 HomeSearchResponse 都没有实现 SearchResponse,因为它们都是从不同的 JSON 模式文件中单独生成的,