代码之家  ›  专栏  ›  技术社区  ›  EasyRider

与泛型方法的接口

  •  0
  • EasyRider  · 技术社区  · 7 年前

    我有很多不同的处理器,每个处理器都有自己的 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
        }
    }
    

    全部 处理请求 类扩展 BaseRequest 全班同学 处理者响应 类扩展 BaseResponse 上课。

    现在,我要做的是 Processor 类实现公共接口 BaseProcessor 因此,如果可能的话,不要触摸现有的代码:

    public interface BaseProcessor {
    
        public RRR process(TTT request) throws Exception;
    
    }
    

    在哪里? RRR TTT 是相应的 处理者响应 处理请求 .

    我试着用泛型。

    public interface Baserocessor<T extends BaseRequest, R extends BaseResponse> {
    
        public R process(T request) throws Exception;
    
    }
    

    但在这种情况下,我需要更改每个进程方法的签名并强制转换 基本请求 给一个 处理请求 :

    public class Processor1 {
        BaseResponse process(BaserRequest baseRequest) {
            ProcessorRequest1 request = (ProcessorRequest1) baseRequest;
            // do something
        }
    }
    

    有没有其他方法可以在不改变每一个处理器的情况下做到这一点?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Vladimir Vagaytsev    7 年前

    处理器类应实现如下通用接口:

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