与通用方法的接口

Interface with Generic method

我有一堆不同的处理器,每个处理器都有自己的 ProcessorRequestProcessorResponse 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;

}

其中RRRTTT对应ProcessorResponseProcessorRequest.

我试着用泛型来做。

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
    }
}