【发布时间】:2018-07-31 21:14:05
【问题描述】:
我有很多不同的处理器,每个处理器都有自己的 ProcessorRequest 和 ProcessorResponse 类。
public class Processor1 {
ProcessorResponse1 process(ProcessorRequest1 request) {
// do something
}
}
public class Processor2 {
ProcessorResponse2 process(ProcessorRequest2 request) {
// do something
}
}
public class Processor3 {
ProcessorResponse3 process(ProcessorRequest3 request) {
// do something
}
}
所有ProcessorRequest 类都扩展了BaseRequest 类,所有ProcessorResponse 类都扩展了BaseResponse 类。
现在,我需要让所有 Processor 类实现一个公共接口 BaseProcessor 所以,如果可能的话不要触及现有代码:
public interface BaseProcessor {
public RRR process(TTT request) throws Exception;
}
其中RRR 和TTT 对应ProcessorResponse 和ProcessorRequest。
我尝试使用泛型来做到这一点。
public interface Baserocessor<T extends BaseRequest, R extends BaseResponse> {
public R process(T request) throws Exception;
}
但在这种情况下,我需要更改每个流程方法的签名并将BaseRequest 转换为ProcessorRequest:
public class Processor1 {
BaseResponse process(BaserRequest baseRequest) {
ProcessorRequest1 request = (ProcessorRequest1) baseRequest;
// do something
}
}
是否有另一种方法可以在不改变每个处理器的情况下做到这一点?
【问题讨论】:
-
如果声明
class Processor1 extends Baserocessor<ProcessorRequest1, ProcessorResponse1>,则不需要任何显式强制转换。