一尘不染

Java中Singleton的其他方式

java

只是我在考虑编写单例课程的其他方式。那么,该课程被视为单身人士课程吗?

      public class MyClass{
            static Myclass myclass;

            static { myclass = new MyClass();}

            private MyClass(){}

            public static MyClass getInstance()
            { 
                return myclass;
            }
       }

因为静态块只能运行一次。


阅读 231

收藏
2020-09-09

共1个答案

一尘不染

不它不是。您没有声明myClass private static final,也不getInstance()static。该代码也不会真正编译。

这是单例成语:

public class MyClass {
    private static final MyClass myClass = new MyClass();

    private MyClass() {}

    public static MyClass getInstance() {
        return myClass; 
    }
}

应该为private,以便其他任何人都不能直接访问它。应该static只有一个。应该final这样,以便不能重新分配它。您还需要在声明期间
直接 实例化它,这样就不必担心线程那么多。

如果加载成本很高,因此您宁愿延迟加载Singleton,则考虑Singleton
Holder
习惯用法,它按需进行初始化,而不是在类加载期间进行初始化:

public class MyClass {
    private MyClass() {}

    private static class LazyHolder {
        private static final MyClass myClass = new MyClass();
    }

    public static MyClass getInstance() {
        return LazyHolder.myClass;
    }
}

但是,您应该提出一个大问号,是否需要一个 Singleton 。通常不需要。 静态变量,枚举,工厂类和/或依赖项注入通常是更好的选择。

2020-09-09