[英]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.