Estaba revisando el código Exchange Web Services Java API y vi una opción de diseño en la forma en que los desarrolladores pasaban los argumentos a sus métodos. Puede ayudar a explicar los beneficios de la técnica:Una forma curiosa de pasar un parámetro a un método
El tipo que se va a procesar con el método está envuelto por una clase de Contenedor genérico antes de pasar al método, por ejemplo, si el método va a funcionar en una String, nuevo Param() se pasa en el método en el que se define de la siguiente Param
class Param<T> {
private T param;
public T getParam() { return param; }
public void setParam(T param) { this.param = param }
}
Aquí hay un fragmento de la fuente - el método funciona en un objeto HttpWebRequest.
El llamante crea una instancia del Param, es decir, delimitada por la clase HttpWebRequest. Entonces esa instancia se pasa al método, como se puede ver en la firma del método -
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();
}
Entonces ¿por qué no pasar el objeto HttpWebRequest - Los desarrolladores utilizan este patrón varias veces todo el código base que hace Creo que hay una buena razón para eso. Pero simplemente no puedo ver el beneficio ... por favor, ilumínalo.
Se puede apuntar a uno de esos casos en GitHub, por favor? ¡Gracias! – Miquel
enlace está en la pregunta – bell0