我正在浏览Exchange Web Services Java API代码,并看到了开发人员将参数传递给他们的方法的设计选择。愿你能帮助解释这项技术的好处——
方法要处理的类型在传递给方法之前由 Generic Wrapper 类封装,例如,如果方法要处理字符串,则将 new Param() 传递给定义为 Param 的方法跟随
class Param<T> {
private T param;
public T getParam() { return param; }
public void setParam(T param) { this.param = param }
}
这是源代码的片段——该方法适用于 HttpWebRequest 对象。
调用者创建Param 的一个实例,即受HttpWebRequest 类的限制。然后将该实例传递给方法,正如您在方法签名中看到的那样——
protected HttpWebRequest emit(OutParam<HttpWebRequest> request)
throws Exception {
request.setParam(this.getService().prepareHttpWebRequest());
OutputStream urlOutStream = request.getParam().getOutputStream();
EwsServiceXmlWriter writer = new EwsServiceXmlWriter(this.service,urlOutStream);
this.writeToXml(writer);
urlOutStream.flush();
urlOutStream.close();
writer.dispose();
request.getParam().executeRequest();
if(request.getParam().getResponseCode() >= 400)
{
throw new Exception("The remote server returned an error:("+request.getParam().getResponseCode()+")"+request.getParam().getResponseText());
}
return request.getParam();
}
那么为什么不直接传递 HttpWebRequest 对象呢——开发人员在整个代码库中反复使用这种模式,这让我认为这是有充分理由的。但我只是看不到好处......请赐教。