我知道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的私有构造函数作为内部类?
此致
答案 0 :(得分:7)
如果它应该是一个真正的单例,请使你的单例类静态。然后你就可以调用构造函数了。
Java nested classes教程解释了构造函数调用不起作用的原因。基本上,内部类在构造之前需要外部类的实例:
private static Singleton sessionData = new NormalClass().new Singleton();
答案 1 :(得分:2)
您不能在非静态类中声明静态类。使Singleton
类保持静态,一切都应该编译得很好。
答案 2 :(得分:1)
问题是内部类不是静态内部类,
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();
}
}
答案 3 :(得分:0)
按需初始化...... 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();
}
}