如何将两个不相关的 class 联系起来,以便它们可以在抽象 class 中用于相同的方法
How to relate two unrelated classes so they can be used in abstract class for same method
我有两个 json 模式文件,其中两个 classes 是使用 jackson- 生成的
CarSearchResponse 和 HomeSearchResponse。他们没有关系。
在我的实现中,我创建了一个具有通用功能的抽象class,然后为 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,那该怎么办?
您可以使用泛型来做到这一点:
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<>();
}
}
我有两个 json 模式文件,其中两个 classes 是使用 jackson- 生成的 CarSearchResponse 和 HomeSearchResponse。他们没有关系。
在我的实现中,我创建了一个具有通用功能的抽象class,然后为 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,那该怎么办?
您可以使用泛型来做到这一点:
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<>();
}
}