在finally块中恢复已保存的值?

Ste*_*tez 2 java design-patterns try-finally

我已经看到这种模式现在在几个不同的地方使用,但我不确定它到底是什么或为什么需要它.鉴于我已经在优质项目中看到它,我确信它很有用,但我想理解它,而不是盲目地遵循它.我在Servlet过滤器和Struts2拦截器中特别看到了这种模式(在概念上与过滤器非常相似).

以下是Google Guice(Servlet)3.0的示例:

Context previous = localContext.get();

try {
  localContext.set(new Context((HttpServletRequest) servletRequest,
      (HttpServletResponse) servletResponse));

  //dispatch across the servlet pipeline, ensuring web.xml's filterchain is honored
  filterPipeline.dispatch(servletRequest, servletResponse, filterChain);
} finally {
  localContext.set(previous);
}
Run Code Online (Sandbox Code Playgroud)

恢复finally块中的值有什么需要或好处?

Dan*_*olo 5

它基本上只是将更改作用于try块的方法.无论块是否成功执行,您都知道,一旦您离开它,您就已将值恢复为进入时的值.