小编Tab*_*tha的帖子

单例类(也是单例)中是否有静态类?

我试图了解在Java 8中,控制器中的嵌套静态类(单例类)是否也是静态的,并且可以在请求之间共享?

这是我正在清理的旧代码,因为可能存在争用条件:控制器具有多个私有字段。每当请求到达控制器时,我便将它们移到静态嵌套类并创建该类的实例。然后,我将该对象传递给私有方法进行计算。

有人告诉我,单例中的静态嵌套类在内存中仅具有该子类的一个实例,如果遇到2个请求,则第二个实例仍然存在。还被警告说有人可以将这个静态类移到外面,这不是采取(?)的好方法

关于静态类和单例之间的区别,有很多答案。在Oracle文档上已经发现:实际上,静态嵌套类在行为上是顶级类,为了包装方便,该顶级类已嵌套在另一个顶级类中。

===但是我还没有发现有关静态嵌套类的任何信息===

我尝试了一下:在handleRequest中暂停一个线程,然后启动第二个线程,发现静态嵌套类的实例不同并且包含不同的值。给定文档,这就是我所期望的,但是我不确定,因为我找不到关于静态嵌套类WITHIN SINGLETON的任何信息。

我想念什么吗?这有可能会失败吗?有更好的解决方案吗?

public class MyController extends WebContentGenerator implements Controller {

  @Override
  public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
  {
    ReportParameters params = new ReportParameters();
    initVars(request, params);
    doWork(params);
    return null;
  }

  private void initVars(HttpServletRequest request, ReportParameters params)
  {
    params.flag = "Y".equals(request.getParameter("flag"));
    params.message = "Hello world";
  }

  private void doWork(ReportParameters params)
  {
    if (params.flag)
      params.message = "foo";
  }

  private static class ReportParameters
  {
    private boolean flag;
    private String message;
  }
}
Run Code Online (Sandbox Code Playgroud)

java singleton static nested class

0
推荐指数
1
解决办法
37
查看次数

标签 统计

class ×1

java ×1

nested ×1

singleton ×1

static ×1