为什么不在java中提供单例实例?

Del*_*lta 0 java singleton

您可以通过实现Singleton模式来创建类单例.如今单身人士课是基本要求.

为什么JVM在运行时不自行处理Singleton对象的创建?

通过像"Singleton"这样的标记接口,并在运行时由JVM创建一次对象实例.无论如何,如果Class没有扩展任何其他类,Java编译器会添加"extends Object".类似的方法可以应用于Singleton案例.这将节省大量的时间和开发工作以及围绕Singleton模式的各种实现的讨论.

1)同步的getInstance()

2)getInstance()内部的同步块,而不是使整个方法同步

3)选项2使用singleInstance作为volatile成员

如果你需要在多个类中实现单例模式(不考虑将返回已传递的任何类的单例实例的SingletonPatternFactory类),这也将节省大量时间和重复工作.

ysh*_*vit 5

让我们来看看创建单例所需的所有步骤:

  1. 私人建设者
  2. 一个静态的最终字段
  3. (可选)如果你想让类可序列化,那么琐碎的实现readResolvewriteObject

我遇到的大多数单身人士并不关心序列化,因此不需要第三步.这给你留下了两个非常非常简单的步骤.

public class Whatever extends WhateverElse {
    public static final Whatever INSTANCE = new Whatever();

    private Whatever() {}
}
Run Code Online (Sandbox Code Playgroud)

它甚至是延迟加载的,因为构造函数在你访问类之前不会运行,这只是获取它的单例实例.我不知道你对"很多"的定义是什么,只要时间和发展努力,但我不认为这是繁重的.