【问题标题】:Interface with Generic method与通用方法的接口
【发布时间】:2018-07-31 21:14:05
【问题描述】:

我有很多不同的处理器,每个处理器都有自己的 ProcessorRequestProcessorResponse 类。

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;

}

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

是否有另一种方法可以在不改变每个处理器的情况下做到这一点?

【问题讨论】:

  • 如果声明class Processor1 extends Baserocessor&lt;ProcessorRequest1, ProcessorResponse1&gt;,则不需要任何显式强制转换。

标签: java generics public


【解决方案1】:

您的处理器类应按如下方式实现通用接口:

public class Processor1 implements BaseProcessor<ProcessorRequest1, ProcessorResponse1> {
    ProcessorResponse1 process(ProcessorRequest1 request) {
        // do something
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2018-06-03
    • 1970-01-01
    • 2018-09-22
    相关资源
    最近更新 更多