记一种泛型的Request/Response设计方法

时间: | 分类: 其他分类

笔者在使用阿里云dns的sdk时对阿里云的client很感兴趣

IAcsClient client = new DefaultAcsClient(profile);

//传入一个域名查询Request
DescribeDomainRecordsRequest req1 = new DescribeDomainRecordsRequest();
DescribeDomainRecordsResponse res = client.getAcsResponse(req1);

//传入一个域名更新Request对象
UpdateDomainRecordRequest req2 = new UpdateDomainRecordRequest();
        UpdateDomainRecordResponse resp2 = client.getAcsResponse(req2);

可以看出同一个方法,传入不同的Request可以获得一个对应的Response对象。

接口方法(省略异常等)

public <T extends AcsResponse> T getAcsResponse(AcsRequest<T> request) 

这里的Response是一个抽象类,没有什么特别的,主要在Request上

class AcsRequest<T extends AcsResponse>{
    //....
}

Request的泛型继承了对应的Reponse。

具体的实现类可以这样写:

MyResponse实现类继承Response抽象类,没什么特别需要注意的,重点在MyRequest实现类上

class MyResponse extends AcsResponse{
    //.....
}
class MyRequest extends AcsRequest<MyResponse>{
    //....
}

然后这个获取泛型Response的方法为:

public <T extends AcsResponse> T getMyresponse(AcsRequest<T> req) {
    //...
}

实际上也就是,对应的request泛型是继承于response的,如果要自己写的话只需要把自己对应的response写到request类的泛型里,调用方法时传入的泛型就是request对应的response


Java



白咲美绘瑠's blog