第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

單例類中的靜態(tài)類也是單例嗎?

單例類中的靜態(tài)類也是單例嗎?

繁星淼淼 2022-11-10 16:47:07
我正在嘗試了解在 Java 8 中,控制器中的嵌套靜態(tài)類(單例類)是否也是靜態(tài)的并且可以在請求之間共享?這是我正在清理的遺留代碼,因為可能存在競爭條件:控制器有多個私有字段。我將它們移動到一個靜態(tài)嵌套類,并在每次請求到達(dá)控制器時創(chuàng)建該類的一個實例。然后我將該對象傳遞給私有方法進(jìn)行計算。有人告訴我,單例中的靜態(tài)嵌套類在內(nèi)存中只有一個子類的實例,如果它被 2 個請求擊中,第二個會堅持。還被警告有人可以將這個靜態(tài)類移到外面,這不是一個好的方法(?)關(guān)于靜態(tài)類和單例之間的區(qū)別有很多答案。在 Oracle 文檔上發(fā)現(xiàn):實際上,靜態(tài)嵌套類在行為上是一個頂級類,為了方便打包,它已經(jīng)嵌套在另一個頂級類中。=== 但是我還沒有找到任何關(guān)于單例中的靜態(tài)嵌套類的信息 ===我試了一下:在handleRequest中暫停了一個線程并啟動了第二個,發(fā)現(xiàn)靜態(tài)嵌套類的實例不同,包含不同的值。鑒于文檔,這是我所期望的,但我不確定,因為我在單例中找不到任何關(guān)于靜態(tài)嵌套類的信息。我錯過了什么嗎?這有可能會失敗嗎?有更好的解決方案嗎?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;  }}
查看完整描述

1 回答

?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗 獲得超3個贊

靜態(tài)嵌套類與頂級類沒有什么不同:每次您使用new創(chuàng)建實例時,您...創(chuàng)建一個實例。如果您多次創(chuàng)建一個實例,那么根據(jù)定義,它不是一個單例。它是從單例創(chuàng)建的這一事實完全無關(guān)緊要。JVM 甚至沒有單例的概念:它只是一種架構(gòu)選擇。



查看完整回答
反對 回復(fù) 2022-11-10
  • 1 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號