灵感来自于Hybris Platform WebService源码
场景:父类泛型T1、T2、T3,子类期望只用两种泛型T1、T2_T3,如何实现?
实现:继承时,父类部分T2、T3合并
代码:
# 父类
package net.generics;
public abstract class AbstractResponseBuilder<RESOURCE, REQUEST, RESPONSE> {
private RESOURCE resource;
private REQUEST request;
private RESPONSE response;
public RESOURCE getResource() {
return resource;
}
public void setResource(RESOURCE resource) {
this.resource = resource;
}
public REQUEST getRequest() {
return request;
}
public void setRequest(REQUEST request) {
this.request = request;
}
public RESPONSE getResponse() {
return response;
}
public void setResponse(RESPONSE response) {
this.response = response;
}
}
# 子类
package net.generics;
public class AbstractYResponseBuilder<RESOURCE, REQ_RESP> extends AbstractResponseBuilder<RESOURCE, REQ_RESP, REQ_RESP> {
private REQ_RESP requestResponse;
public REQ_RESP getRequestResponse() {
return requestResponse;
}
public void setRequestResponse(REQ_RESP requestResponse) {
this.requestResponse = requestResponse;
}
public static void main(String[] args) {
AbstractYResponseBuilder<String, Integer> responseBuilder = new AbstractYResponseBuilder<String, Integer>();
String resource = responseBuilder.getResource();
Integer request = responseBuilder.getRequest();
Integer response = responseBuilder.getResponse();
Integer requestResponse = responseBuilder.getRequestResponse();
}
}
可以看出,子类的泛型范围被缩减了。