簡體   English   中英

Java單例內部類

[英]Java singleton inner class

我知道Java中單例的概念。 我在使用Java創建單例作為內部類時遇到了問題。 持有人出現問題

public class NormalClass {
    private class Singleton {
        private static Singleton instance = null;

        private Singleton() {
        }

        private static class SingletonHolder {
            private static Singleton sessionData = new Singleton();
        }

        public static Singleton getInstance() {
            return NormalClass.Singleton.SingletonHolder.sessionData;
        }
    }

    public void method1() {
        Singleton.getInstance();
    }
}

錯誤是在新的Singleton()構造函數調用。 如何正確調用Singleton的私有構造函數作為內部類?

問候

如果它應該是一個真正的單例,請使你的單例類靜態。 然后你就可以調用構造函數了。

Java嵌套類教程中解釋了構造函數調用不起作用的原因。 基本上,內部類在構造之前需要外部類的實例:

private static Singleton sessionData = new NormalClass().new Singleton();

您不能在非靜態類中聲明靜態類。 使Singleton類靜態,一切都應該編譯得很好。

問題是內部類不是靜態內部類,

public class NormalClass {
  private static class Singleton {
      private static Singleton instance = null;

      private Singleton() {
      }

      private static class SingletonHolder {
          private static Singleton sessionData = new Singleton();
      }

      public static Singleton getInstance() {
          return NormalClass.Singleton.SingletonHolder.sessionData;
      }
  }

  public void method1() {
      Singleton.getInstance();
  }
}

按需初始化...... Joshua Bloch ..

我認為如果你的內部類是靜態的,你的持有者類也應該是靜態的。

private static class SingletonHolder {
    static final Singleton instance = new Singleton();
}

或者為什么不喜歡這樣? 為什么一個內部持有者類?

public class NormalClass{
  private static class InnerClass{
    private static InnerClass instance = null;
    private InnerClass(){}
    public static InnerClass getInstance() {
  if(null==NormalClass.InnerClass.instance){
    NormalClass.InnerClass.instance = new InnerClass(); 
  }
  return NormalClass.InnerClass.instance;
}
  }

  public void test(){
    InnerClass.getInstance();
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM