Java单例内部类
我知道Java中单例的概念。 我在Java中将singleton创建为内部类时遇到问题。问题发生在持有者的位置Java单例内部类,java,singleton,inner-classes,Java,Singleton,Inner Classes,我知道Java中单例的概念。 我在Java中将singleton创建为内部类时遇到问题。问题发生在持有者的位置 public class NormalClass { private class Singleton { private static Singleton instance = null; private Singleton() { } private static class SingletonHolder
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的私有构造函数作为内部类
关于如果它应该是一个真正的单例类,请将单例类设置为静态。然后您将能够调用构造函数 本教程解释了构造函数调用不起作用的原因。基本上,内部类在构造外部类之前需要外部类的实例:
private static Singleton sessionData = new NormalClass().new 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();
}
}
按需初始化。。。。约书亚·布洛赫 我认为如果你的内部类是静态的,那么你的holder类也应该是静态的
private static class SingletonHolder {
static final Singleton instance = new Singleton();
}
或者为什么不这样呢?为什么是内部holder类
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();
}
}