如何关联两个不相关的类,以便它们可以在抽象类中用于相同的方法
Posted
技术标签:
【中文标题】如何关联两个不相关的类,以便它们可以在抽象类中用于相同的方法【英文标题】:How to relate two unrelated classes so they can be used in abstract class for same method 【发布时间】: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您可以使用泛型做到这一点:
class ResponseWrapper<T>
class HomeSearchResponse
class CarSearchResponse
abstract class SearchResponseFlow<T>
public void execute(T response)
System.out.println(response);
abstract ResponseWrapper<T> getData();
class HomeSearchResponseFlow extends SearchResponseFlow<HomeSearchResponse>
@Override
public void execute(HomeSearchResponse homeSearchResponse)
System.out.println(homeSearchResponse);
@Override
ResponseWrapper<HomeSearchResponse> getData()
return new ResponseWrapper<>();
class CarSearchResponseFlow extends SearchResponseFlow<CarSearchResponse>
@Override
public void execute(CarSearchResponse carSearchResponse)
System.out.println(carSearchResponse);
@Override
ResponseWrapper<CarSearchResponse> getData()
return new ResponseWrapper<>();
【讨论】:
以上是关于如何关联两个不相关的类,以便它们可以在抽象类中用于相同的方法的主要内容,如果未能解决你的问题,请参考以下文章