gpt4 book ai didi

java - 为什么java中不提供开箱即用的单例实例?

转载 作者:行者123 更新时间:2023-12-01 06:46:34 25 4
gpt4 key购买 nike

您可以通过实现单例模式来使类单例。如今单例类是基本要求。

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

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

1) 同步 getInstance()

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

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

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

最佳答案

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

  1. 私有(private)构造函数
  2. 静态最终字段
  3. (可选)如果您希望该类可序列化,请实现 readResolvewriteObject

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

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

private Whatever() {}
}

它甚至是延迟加载的,因为构造函数在您访问该类之前不会运行,而访问该类只是为了获取它的单例实例。我不知道你对“很多”的定义是什么,就时间和开发工作而言,但我不认为这很繁重。

关于java - 为什么java中不提供开箱即用的单例实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com