【问题标题】:How does method chaining work?方法链是如何工作的?
【发布时间】:2015-02-06 13:43:12
【问题描述】:
在下面的示例中,getRequestDispatcher("xxx") 是如何从 getServletContext() 调用的?像这样的调用程序一般是如何工作的?请给我一个关于这种情况的清晰图片。
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/index.jsp");
dispatcher.include(request, response);
【问题讨论】:
标签:
java
jsp
servlets
calling-convention
method-call
【解决方案1】:
getServletContext() 返回一个ServletContext 对象,该对象有一个名为getRequestDispatcher() 的方法。您的代码行只是两个方法调用的简写,等效于以下代码:
ServletContext context = getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher("/index.jsp");
【解决方案2】:
一般来说,method chaining 是实现fluent 和灵活接口的好习惯。
通常......要实现它,您只需执行代码并返回当前对象。例如,在 Java 中:
public Criterios<T> setOrdem(String campo, String direcao) {
getOrdenacao().set(campo, direcao);
return this;
}
public Criterios<T> setOrdem(String campo) {
return setOrdem(campo, Ordenacao.Direcao.ASC);
}
public final Criterios<T> setPagina(int pagina) {
getPaginacao().setPagina(pagina);
return this;
}
public final Criterios<T> setQuantidade(int quantidade) {
getPaginacao().setQuantidade(quantidade);
return this;
}
返回当前对象一遍又一遍地提供相同的 API...但是,通过每次迭代,对象都会一步一步、有序地改变。