这个java单例类实现有什么问题?

Sam*_*ddy 2 java

我在stackexchange中遇到了另一篇关于实现java单例的各种方法的文章.显示的方法之一是以下示例.它的投票率非常低.想知道为什么. 在Java中实现单例模式的有效方法是什么?

public class Singleton {

    private static Singleton instance = null;

    static {
          instance = new Singleton();
          // do some of your instantiation stuff here
    }

    private Singleton() {
          if(instance!=null) {
                  throw new ErrorYouWant("Singleton double-instantiation, should never happen!");
          }
    }

    public static getSingleton() {
          return instance;
    }

}
Run Code Online (Sandbox Code Playgroud)

Ale*_*rlo 5

正如@ Craig在评论中所说:

不对.加载类时,静态变量与静态块一起初始化.无需拆分声明.

从本质上来说,它被投了票,因为这是错误的信息,他所说的很多内容都是不正确的.具体来说,在加载类时使用静态方法初始化静态变量,而作者声称情况并非如此.

他的论点也没有意义,"数据插入"只能在构造函数中完成.

话虽如此,上面的代码可以正常工作,这只是一种奇怪的方式,可以说是最不风格的.

  • 再看一遍,它不仅是错误信息,而且实际上没有任何意义,他实际上将构造函数中可能完成的所有工作都移动到静态块中.所以这是对他的帖子的两次打击......我很惊讶他得到了投票. (2认同)