与通用方法的接口
Interface with Generic method
我有一堆不同的处理器,每个处理器都有自己的 ProcessorRequest
和 ProcessorResponse
classes.
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
class 扩展 BaseRequest
class,所有 ProcessorResponse
class 扩展 BaseResponse
class.
现在,我要求让所有 Processor
class 实现一个公共接口 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
}
}
是否有另一种方法可以在不改变每个处理器的情况下做到这一点?
您的处理器 类 应按如下方式实现通用接口:
public class Processor1 implements BaseProcessor<ProcessorRequest1, ProcessorResponse1> {
ProcessorResponse1 process(ProcessorRequest1 request) {
// do something
}
}
我有一堆不同的处理器,每个处理器都有自己的 ProcessorRequest
和 ProcessorResponse
classes.
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
class 扩展 BaseRequest
class,所有 ProcessorResponse
class 扩展 BaseResponse
class.
现在,我要求让所有 Processor
class 实现一个公共接口 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
}
}
是否有另一种方法可以在不改变每个处理器的情况下做到这一点?
您的处理器 类 应按如下方式实现通用接口:
public class Processor1 implements BaseProcessor<ProcessorRequest1, ProcessorResponse1> {
ProcessorResponse1 process(ProcessorRequest1 request) {
// do something
}
}